可能重复:
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++ 之间的区别,但原因是什么?
可能重复:
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++ 之间的区别,但原因是什么?
在 C 中,字符常量的类型int
符合标准的 6.4.4.4(10),
整数字符常量的类型为 int。包含映射到单字节执行字符的单个字符的整数字符常量的值是被解释为整数的映射字符表示的数值。
因此,您打印出int
两倍的大小。
在 C++ 中,字符常量的类型为char
.
在 C 中,字符文字是整数。在 C++ 中,它们是字符。
输出已经依赖于编译器,因为您size_t
为此使用了错误的格式说明符%zu
。size_t
在比这更宽的64 位系统上,int
可能会给您带来任何类型的垃圾。
否则,此舒尔依赖于编译器。您尝试打印大小的两个值都int
在 C 和char
C int
++ 中。所以在 C 中,这通常应该给你4 4
or8 8
和在 C++ 中1 4
或1 8
.