sizeof(’a’)和sizeof(“a”)之间的差异

我的问题是关于C中的sizeof运算符。

sizeof('a'); 等于4 ,因为它将'a'作为整数:97。

sizeof("a"); 等于2 :为什么? 另外(int)("a")将给出一些垃圾值。 为什么?

'a'是一个字符常量 – 标准C中的int类型 – 表示单个字符"a"是一种不同的东西:它是一个字符串文字 ,实际上由两个字符组成: a和终止空字符。

字符串文字是一个char数组,有足够的空间来容纳字符串中的每个字符和终止空字符。 因为sizeof(char)1 ,并且因为字符串文字是数组,所以sizeof("stringliteral")将返回字符串文字中的字符元素数, 包括终止空字符。

'a'是一个int而不是char是标准C的怪癖,并解释了为什么sizeof('a') == 4 :这是因为sizeof('a') == sizeof(int) 。 在C ++中不是这种情况,其中sizeof('a') == sizeof(char)

因为’a’是一个字符,而“a”是一个由’a’字符后跟null的字符串。