4

为什么以下程序的输出是 4?

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof('3'));
    return 0;
}
4

2 回答 2

10

因为字符常量的类型是int, not char(并且int在您的平台上的大小是四)。

C99 规范草案说:

整数字符常量的类型为 int。

这可能看起来很奇怪,但请记住,您可以这样做:

const uint32_t png_IHDR = 'IHDR';

换句话说,单个字符常量可以包含多个实际字符(四个,以上)。这意味着结果不能具有 type char,因为那样它将立即溢出并且毫无意义。

注意:上面不是一个很好的方式来做它似乎暗示的事情,这是另一个讨论。:)

于 2013-10-11T12:23:42.863 回答
5

字符文字是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 
于 2013-10-11T12:24:43.730 回答