C 在下面的程序中解释sizeof()运算符的工作原理?

C 在下面的程序中解释sizeof()运算符的工作原理?,c,C,输出: 4.8 我想知道为什么会发生这种情况?在C中,浮点文本实际上是双精度的,除非在它后面加上一个f,即10.5f。简而言之,在第二种情况下得到8的原因是编译器将浮点文本视为双精度 使用浮点文字将修复差异: #include<stdio.h> void main() { float a=10.5; printf("%d%d",sizeof(a),sizeof(10.5)); } 这张照片 printf("%d%d",sizeof(a),sizeof(10.5F)); .像10.

输出: 4.8


我想知道为什么会发生这种情况?

在C中,浮点文本实际上是双精度的,除非在它后面加上一个f,即10.5f。

简而言之,在第二种情况下得到8的原因是编译器将浮点文本视为双精度

使用浮点文字将修复差异:

#include<stdio.h>
void main()
{
float a=10.5;
printf("%d%d",sizeof(a),sizeof(10.5));
}
这张照片

printf("%d%d",sizeof(a),sizeof(10.5F));

.

像10.5这样的浮点文本有double类型,通常为8字节宽

而是一个float,因为您显式声明了它,注意在它的初始化中有一个从double到float的隐式转换


如果要指定浮点文字,请将f附加到它sizeof10.5f通常为4。

sizeof返回任何数据类型的大小,以表示该类型所需的字节数度量。来自维基百科

在这种情况下,a是浮点,浮点类型需要4个字节。 第二个数字10.5是双精度类型,需要8个字节。

这里sizeofa是浮点的大小,而sizeof10.5是双精度的大小。

因为这里

4 4

希望这能解释您的问题。

这是因为标准对sizrof运营商说:

C11:6.5.3.4: sizeof运算符生成其操作数的大小(以字节为单位),该操作数可以是 表达式或类型的括号名称。大小由类型决定 操作数。结果是一个整数。如果操作数的类型是可变长度数组 类型,则计算操作数;否则,不计算操作数,结果为 整数常量


因此,无论sizeof运算符的操作数值是什么,它都会根据类型数据类型确定大小:char、int、double、long。。。。操作数的类型

像10.5这样的浮点文本是double类型。当您使用浮点a=10.5时,double将隐式转换为浮点

10.5f是浮点文本,因此sizeof10.5f应返回与sizeoffloat相同的内容

a is of type float (4-Byte)
and when you just use literal decimal like 10.5 it's 
treated as double (8-Byte).