#include<stdio.h>
void main()
{
float a=10.5;
printf("%d%d",sizeof(a),sizeof(10.5));
}
输出: 4 8
我想知道为什么会这样?
答案 0 :(得分:6)
在C中,浮点文字实际上是一个双精度,除非你用f后缀(即10.5f
)。
答案 1 :(得分:3)
简而言之,在第二种情况下获得8
的原因是编译器将浮点文字视为double
。
使用浮点字面值可以解决这个差异:
printf("%d%d",sizeof(a),sizeof(10.5F));
打印
4 4
答案 2 :(得分:3)
此处sizeof(a)
是浮动的大小,而sizeof(10.5)
的大小是双倍。
答案 3 :(得分:0)
浮点文字(如10.5
)的类型为double
,通常为8个字节宽。
a
取而代之的是float
,因为您明确地声明了它(请注意,在其初始化中存在从double
到float
的隐式转换。)
如果您要指定float
字面值,请向其f
追加sizeof(10.5f)
通常为4。
答案 4 :(得分:0)
sizeof()返回任何数据类型的大小,以表示类型所需的字节数来衡量。 (来自维基百科)
在这种情况下,a是float,float类型需要4个字节。 第二个数字10.5是双重类型,它需要8个字节。
答案 5 :(得分:0)
因为这里
a is of type float (4-Byte)
and when you just use literal decimal like 10.5 it's
treated as double (8-Byte).
希望能解释你的问题。
答案 6 :(得分:0)
这是因为标准说sizrof
运算符:
sizeof
运算符产生其操作数的大小(以字节为单位),可以是 表达式或类型的括号名称。 大小取决于类型 操作数。结果是整数。如果操作数的类型是可变长度数组 type,操作数被评估;否则,不评估操作数,结果是 整数常数。
因此,无论sizeof
运算符的操作数的值是什么,它都根据操作数的类型(数据类型:char, int, double, long ....
)确定大小。
答案 7 :(得分:0)
10.5
等浮点文字的类型为double
。执行float a = 10.5
时,double会被隐式转换为float。
10.5f
是float
字面值,因此sizeof(10.5f)
应返回与sizeof(float)
相同的内容。