为啥 sizeof() 返回 4 个字节而不是 2 个字节的 short int? [复制]

Posted

技术标签:

【中文标题】为啥 sizeof() 返回 4 个字节而不是 2 个字节的 short int? [复制]【英文标题】:why is sizeof() returning 4 bytes rather than 2 bytes of short int? [duplicate]为什么 sizeof() 返回 4 个字节而不是 2 个字节的 short int? [复制] 【发布时间】:2017-07-26 11:15:43 【问题描述】:

使用 sizeof() 打印变量的大小

#include <stdio.h>

main()

    int a = 10,b = 20; 
    short int c;
    short int d = sizeof(c = a+b);
    int e = sizeof(c*d); //e holds the value of 4 rather than 2
    double f = sizeof(e*f);
    printf("d:%d\ne:%d\nf:%lf\n",d,e,f);

为什么 sizeof() 返回 int 的大小而不是 short int 的大小,这意味着 2 个字节?

【问题讨论】:

另见:why sizeof(short + short) has different size than sizeof(short)? 【参考方案1】:

声明

sizeof(c = a+b);

不测量变量c 的大小,而是测量从表达式c = a+b 计算的值的大小。分配给c的是a+b的值,但它也是整个表达式的值。

在算术表达式中出现的存储类型小于int 的整数值被提升为int(或unsigned int)进行计算。算术表达式结果的存储类型为int。将其存储在 short int 变量中这一事实不受影响。因此 sizeof() 返回的值。

sizeof(c*d) 也一样。

【讨论】:

以上是关于为啥 sizeof() 返回 4 个字节而不是 2 个字节的 short int? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥c#中bool要占4个字节 32位呢 为啥不用像byte 1个字节存储呢

在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]

memset的用法

指针数组与sizeof运算符

为啥“sizeof(a ? true : false)”会给出四个字节的输出?

为啥 InputStream#read() 返回一个 int 而不是一个字节?