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、结构体
    会根据内存字节对齐计算出占用字节大小。

扩展

    sizeof(1.0)=8;1.0被认为是double类型,所以占用8字节;

    sizeof('a');在C中等于4,在C++中等于1,为啥??

        C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以占4字节。
        ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节。

    sizeof("a")=2;这个是正常的,带结束符'\0';

    sizeof(指针);在32位系统占4字节,在64位系统占8字节,其他类型变量在32货或64位系统没有差异。

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值