C 在下面的程序中解释sizeof()运算符的工作原理?
输出: 4.8C 在下面的程序中解释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.
我想知道为什么会发生这种情况?在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).