4

我有一小段代码。当我在 DevC++ gnu 编译器上运行它时,它会显示以下输出:

 main ()
 {      char b = 'a';
        printf ("%d,", sizeof ('a'));
        printf ("%d", sizeof (b));
        getch ();
 }

输出:4,1

为什么将其'a'视为整数,而 asb仅视为字符常量?

4

4 回答 4

9

因为字符文字是类型的int,而不是charC 中的。

所以sizeof 'a' == sizeof (int)

请注意,在 C++ 中,字符文字的类型是charsizeof 'a' == sizeof (char)

于 2012-07-26T15:21:58.087 回答
0

这就是它在 C 中的方式。这就是该语言最初的定义方式。至于为什么...当时 C 中的几乎所有东西都是int,除非有很好的理由把它变成别的东西。因此,历史上 C 中的字符常量具有 type int

注意顺便说一句,在 C 命名法'a'中称为constant,而不是literal。C 有字符串文字,没有其他文字。

于 2012-07-26T15:27:04.687 回答
0

在 C 中,字符文字的类型为 int。

在 C++ 中,仅包含一个字符的字符文字具有 char 类型,它是一种整数类型。

在 C 和 C++ 中,宽字符文字的类型为 wchar_t,多字符文字的类型为 int。

于 2012-07-26T15:29:17.500 回答
0

来自 IBM XL C/C++ 文档

字符文字包含用单引号符号括起来的字符序列或转义序列,例如“c”。字符文字可以以字母 L 为前缀,例如 L'c'。没有 L 前缀的字符文字是普通字符文字或窄字符文字。带有 L 前缀的字符文字是宽字符文字。包含多个字符或转义序列(不包括单引号 (')、反斜杠 () 或换行符)的普通字符文字是多字符文字。

字符文字具有以下形式:

             .---------------------.
             V                     |
>>-+---+--'----+-character-------+-+--'------------------------><
   '-L-'       '-escape_sequence-'

字符文字中必须至少出现一个字符或转义序列。字符可以来自源程序字符集,不包括单引号、反斜杠和换行符。字符文字必须出现在单个逻辑源行上。

CA 字符文字的类型为 int

于 2012-07-26T15:38:40.277 回答