以下计划
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('\0'));
printf("%d\n", sizeof(0));
}
使用gcc输出编译
4
4
和g ++
1
4
为什么会这样?我知道这不是编译器的事情,而是C和C ++之间的区别,但是原因是什么?
答案 0 :(得分:35)
在C中,字符常量按照标准的6.4.4.4(10)具有类型int
,
整数字符常量的类型为int。整数字符常量的值 包含映射到单字节执行字符的单个字符是 解释为整数的映射字符表示的数值。
因此,您打印出int
两次的大小。
在C ++中,字符常量的类型为char
。
答案 1 :(得分:12)
答案 2 :(得分:4)
在C字符中,文字是整数。在C ++中,它们是字符。
答案 3 :(得分:0)
输出已经依赖于编译器,因为您对size_t
使用了错误的格式说明符,这将是%zu
。在size_t
宽于int
的64位系统上,这可能会给你带来任何垃圾。
否则这个shure依赖于编译器。您尝试打印大小的两个值在C中都是int
,在C ++中是char
和int
。所以在C中,这通常应该为您提供4 4
或8 8
以及C ++ 1 4
或1 8
。