• 关于sizeof,你看我就够了


    本文收集了《程序员面试宝典》和《C和C++程序员面试秘籍》中的关于sizeof的题目,让大家一次性解决sizeof问题

    1.使用sizeof计算普通变量所占空间的太小

    char str[] = "Hello";
    char *p = str;
    int n = 10;
    

    sizeof(str)=
    sizeof(p)=
    sizeof(n)=
    void Func (char str[100])
    {
        sizeof(str)=
    }
    void *p = malloc(100)
    sizeof(p)=
    

    解答:

    • 对数组变量做sizeof运算得到的是数组占用内存的总大小,加上数组中有一个元素’‘所以为6
    • p为指针变量,n为int型变量。在32位平台下,指针和int都是4个字节,所以结果为4
    • str为函数的参数,调用函数Func(str)是 地址传递,所以str是一个指针来指向数组,所以结果为4
    • p还是一个指针,所以还是4

    2.使用sizeof计算类对象所占空间大小

    #include <iostream.h>
    
    clsaa A
    {
    public:
        int i;
    };
    
    class B
    {
    public:
        char ch;
    };
    
    class C
    {
    public:
        int i;
        short j;
    };
    
    class D
    {
    public:
        int i;
        short j;
        char ch;
    };
    
    class E
    {
    public:
        int i;
        int ii;
        short j;
        char ch;
        char chr;
    };
    
    class F
    {
    public:
        int i;
        int ii;
        int iii;
        short j;
        char ch;
        char chr;
        
    };
    
    int main()
    {
       cout<<sizeof(int)<<endl;
       cout<<sizeof(short)<<endl;
       cout<<sizeof(char)<<endl;
       cout<<endl;
       cout<<sizeof(A)<<endl;
       cout<<sizeof(B)<<endl;
       cout<<sizeof(C)<<endl;
       cout<<sizeof(D)<<endl;
       cout<<sizeof(E)<<endl;
       cout<<sizeof(F)<<endl;
       return 0;
    }
    

    解答:在32位操作系统环境下,char占一个字节,int占4个字节,short占2个字节

    sizeof(A) = 4;
    sizeof(B) = 1;
    sizeof(C) = 4+2=6;
    sizeof(D) = 4+2+1=7;
    sizeof(E)= 24+21+2=12;
    sizeof(F)= 34+21+2+2=15;


    实际的结果却是:

    sizeof(A) = 4;
    sizeof(B) = 1;
    sizeof(C) = 8;
    sizeof(D) = 8;
    sizeof(E)= 12;
    sizeof(F)= 16;

    主要原因是由于字节对齐

  • 相关阅读:
    在Windows 10 环境下安装 Hadoop3.1.2
    jQuery选择器分类
    Hibernate 注解的用法以及说明
    EF中Repository模式应用场景
    C# Lambda表达式
    arpd编译错误
    【转】matplotlib画图时的中文设置
    Xt800、DEFY自带号码归属地更新包,更新至2013.4【数据总数278360条】
    80个Python经典资料(教程+源码+工具)汇总
    POJ 1026:Cipher
  • 原文地址:https://www.cnblogs.com/zhuyaguang/p/5644704.html
Copyright © 2020-2023  润新知