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的字符串。