C语言-sizeof()

是函数吗?
    不是函数,是关键字,在编译时计算出对象所占的字节数。

对象类型
    0、变量
    返回变量类型占用的字节大小。
    
    1、表达式
    char c = 1;
    int i = 2;
    printf("%ld,%ld\n",sizeof(c + i),sizeof(c = c + i));//4,1
    前者c + i会隐式类型转化为int类型(类型提升),因此返回4(32/64位系统), 而后者虽然运算时也是转化为int,但赋值给c时又会转化为char,因此返回的是1,其中的表达式不会真正的执行。

    2、函数
    char FunSizeof()
    printf("%ld\n", sizeof(FunSizeof()));//1
    不会执行函数,只是判断了返回类型。
    
    3、数组/指针
    当sizeof的对象是数组时,返回数组总字节大小,而当对象是指针时,返回指针本身的大小,而不是指示内存空间的大小。因为指针本身就是一个无符号整型数, 因此int *p ,sizeof(p)返回的大小是sizeof(void *), 32 位系统返回4,即32位;64 位系统返回8,查看Linux系统位数命令:getconf LONG_BIT。

    4、动态内存
    sizeof 无法获取动态分配的内存大小,即使用malloc动态的分配内存,无法使用sizeof获取其大小,因为sizeof是在编译时就确定其值。

    5、结构体
    会根据内存字节对齐计算出占用字节大小。

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/82868929