我有一小段代码。 当我在我的DevC ++ gnu编译器上运行它时,它显示以下输出:
main ()
{ char b = 'a';
printf ("%d,", sizeof ('a'));
printf ("%d", sizeof (b));
getch ();
}
输出:4,1
为什么'a'
被视为整数,而b
被视为只是一个字符常量?
答案 0 :(得分:9)
因为字符文字在C中的类型为int
而不是char
。
所以sizeof 'a' == sizeof (int)
。
请注意,在C ++中,字符文字的类型为char
,因此sizeof 'a' == sizeof (char)
。
答案 1 :(得分:0)
这就是它在C中的方式。这就是语言最初定义的方式。至于为什么...当时几乎C中的所有东西都是int
,除非有一个很好的理由让它成为别的东西。因此,历史上C中的字符常量具有类型int
。
注意BTW,在C命名法'a'
中称为常量,而不是 literal 。 C有字符串文字,没有其他文字。
答案 2 :(得分:0)
在C中,字符文字的类型为int。
在C ++中,只包含一个字符的字符文字具有char类型,这是一个整数类型。
在C和C ++中,宽字符文字的类型为wchar_t,多字符文字的类型为int。
答案 3 :(得分:0)
来自IBM XL C / C ++文档
字符文字包含一系列字符或转义符 用单引号符号括起来的序列,例如'c'。 例如,字符文字可以以字母L为前缀 L'C”。没有L前缀的字符文字是普通的 字符文字或狭义字符文字。字符文字 L前缀是一个宽字符文字。一个普通人物 包含多个字符或转义序列的文字 (不包括单引号('),反斜杠()或换行符) 是一个多字符文字。
字符文字具有以下形式:
.---------------------.
V |
>>-+---+--'----+-character-------+-+--'------------------------><
'-L-' '-escape_sequence-'
角色中必须至少出现一个字符或转义序列 文字。字符可以来自源程序字符集, 不包括单引号,反斜杠和换行符号。一个 字符文字必须出现在单个逻辑源行上。
C字符文字的类型为int