为什么sizeof(13.33)是8个字节?

当我给sizeof(a) ,其中a=13.33 ,一个浮点变量,大小是4个字节。 但如果直接给出sizeof(13.33) ,则大小为8个字节。

我不明白发生了什么。 有人可以帮忙吗?

这些是语言规则。

13.33是一个数字文字。 它被视为双倍,因为它是双倍的。 如果您希望将13.33视为浮点字面值,则表示13.33f。

13.33是双字面的。 如果sizeof(float)== 4,sizeof(13.33f)== 4也应该成立,因为13.33f是一个浮点字面值。

文字13.33被视为双精度浮点值,宽度为8个字节。

13.33字面值被视为“双重”,而不是“浮动”。

请尝试13.33f。

变量的类型和大小都很好。 只是编译器有一些文字的默认类型,那些在程序中硬编码的常量值

如果你请求sizeof(1) ,你将获得sizeof(int) 。 如果你请求sizeof(2.5) ,你将获得sizeof(double) 。 那些分别显然适合于char和float,但编译器具有文字的默认类型,并将其视为直到赋值。

但是,您可以覆盖此默认行为。 例如:

 2.5 // as you didn't specify anything, the compiler will take it for a double. 2.5f // ah ha! you're specifying this literal to be float 

干杯!

因为13.33是一个double ,如果你赋值它会被截断为floatdouble是8字节。 要创建一个真正的浮点数,请使用13.33f (注意f )。