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