3
         #include<stdio.h>

         int main()
         {

           char ch = 'A';

           printf("%d\n",'ag');

           printf("%d\n",'a');

           printf("%d, %d, %d, %d", sizeof(ch), sizeof('a'), sizeof('Ag'), sizeof(3.14f));

          return 0;
         }

在 g++ 和 gcc 上运行时,我曾经对这个问题的输出有很多疑问。

但是我通过参考这些链接消除了几乎所有的疑虑:

  1. C/C++ 中的单引号、双引号和 sizeof('a')

  2. C 或 C++ 中的单引号与双引号

关于这个问题的输出,我仍然需要了解一件事。

有人可以printf("%d\n",'ag');在程序中解释上面提到的输出吗?它实际上是如何存储在内存中的?

该程序在 Linux/GCC 平台上的输出是:

24935
97
1, 4, 4, 4
4

2 回答 2

5

单引号文字的类型是int. 因此,大小通常足以容纳超过一个字符的位。据我所知,解释字符的确切方式取决于实现。

在你的情况下,你得到一个小端序:

  • ASCII 值为'a'97 (0x61)
  • ASCII 值为'g'103 (0x67)

你的值是 24935 = 0x6167,所以你得到的'a'是高字节和'g'低字节。

于 2012-08-31T09:38:34.333 回答
3

单引号中多个字符的含义是实现定义的。

6.4.4.4

整数字符常量的类型为 int。包含映射到单字节执行字符的单个字符的整数字符常量的值是被解释为整数的映射字符表示的数值。包含多个字符(例如,'ab')或包含不映射到单字节执行字符的字符或转义序列 的整数字符常量的值 是实现定义的

例如,在这种情况下24935是:字符并排0x6167的 ASCII 值。ag

于 2012-08-31T09:38:35.803 回答