21

可能重复:
C/C++ 中字符('a')的大小

以下程序

#include <stdio.h>

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

使用 gcc 输出编译

4
4

和 g++

1
4

为什么会这样?我知道这不是编译器的问题,而是 C 和 C++ 之间的区别,但原因是什么?

4

4 回答 4

35

在 C 中,字符常量的类型int符合标准的 6.4.4.4(10),

整数字符常量的类型为 int。包含映射到单字节执行字符的单个字符的整数字符常量的值是被解释为整数的映射字符表示的数值。

因此,您打印出int两倍的大小。

在 C++ 中,字符常量的类型为char.

于 2012-07-25T10:10:02.240 回答
12

字符文字在 C中\0被视为 a int,因此您实际上最终打印sizeof(int)而不是sizeof(char).

ideone给出相同的结果(CC++)。

于 2012-07-25T10:05:45.957 回答
4

在 C 中,字符文字是整数。在 C++ 中,它们是字符。

于 2012-07-25T10:06:30.633 回答
0

输出已经依赖于编译器,因为您size_t为此使用了错误的格式说明符%zusize_t在比这更宽的64 位系统上,int可能会给您带来任何类型的垃圾。

否则,此舒尔依赖于编译器。您尝试打印大小的两个值都int在 C 和charC int++ 中。所以在 C 中,这通常应该给你4 4or8 8和在 C++ 中1 41 8.

于 2012-07-25T16:54:07.307 回答