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

时间:2014-01-18 13:01:59

标签: c

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

输出: 4 8

我想知道为什么会这样?

8 个答案:

答案 0 :(得分:6)

在C中,浮点文字实际上是一个双精度,除非你用f后缀(即10.5f)。

答案 1 :(得分:3)

简而言之,在第二种情况下获得8的原因是编译器将浮点文字视为double

使用浮点字面值可以解决这个差异:

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

打印

4 4

Demo on ideone

答案 2 :(得分:3)

此处sizeof(a)是浮动的大小,而sizeof(10.5)的大小是双倍。

答案 3 :(得分:0)

浮点文字(如10.5)的类型为double,通常为8个字节宽。

a取而代之的是float,因为您明确地声明了它(请注意,在其初始化中存在从doublefloat的隐式转换。)

如果您要指定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运算符:

C11:6.5.3.4:

  

sizeof运算符产生其操作数的大小(以字节为单位),可以是   表达式或类型的括号名称。 大小取决于类型   操作数。结果是整数。如果操作数的类型是可变长度数组   type,操作数被评估;否则,不评估操作数,结果是   整数常数。

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

答案 7 :(得分:0)

10.5等浮点文字的类型为double。执行float a = 10.5时,double会被隐式转换为float。

10.5ffloat字面值,因此sizeof(10.5f)应返回与sizeof(float)相同的内容。