为什么以下程序的输出是 4?
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('3'));
return 0;
}
因为字符常量的类型是int
, not char
(并且int
在您的平台上的大小是四)。
C99 规范草案说:
整数字符常量的类型为 int。
这可能看起来很奇怪,但请记住,您可以这样做:
const uint32_t png_IHDR = 'IHDR';
换句话说,单个字符常量可以包含多个实际字符(四个,以上)。这意味着结果值不能具有 type char
,因为那样它将立即溢出并且毫无意义。
注意:上面不是一个很好的方式来做它似乎暗示的事情,这是另一个讨论。:)
字符文字是int
.
在 C 类型的字符常量中就像 '3' 是int
.
sizeof(character_constant)==sizeof(int)==> In your case sizeof(int)==4
在 C++ 中它在哪里char
这种差异可能会导致某些同时编译为 C 和 C++ 的代码出现不一致的行为。
memset(&i, 'a', sizeof('a')); // Questionable code