c中单引号中两个字符的用法

sta*_*k92 3 c

         #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;
         }
Run Code Online (Sandbox Code Playgroud)

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

但我通过引用这些链接已经清除了几乎所有的疑虑:

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

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

我仍然需要了解这个问题的输出.

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

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

24935
97
1, 4, 4, 4
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 5

单引号文字的类型是int.因此,大小通常足以容纳多个字符的位数.据我所知,字符被解释的确切方式依赖于实现.

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

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

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

  • 确认实现定义的部分:ISO/IEC 9899,6.4.4.4:10:*包含多个字符(例如,'ab')的整数字符常量的值,或包含不映射的字符或转义序列的值到单字节执行字符,是实现定义的.* (2认同)