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

时间:2012-08-31 09:34:38

标签: 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;
         }

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

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

  1. Single, double quotes and sizeof('a') in C/C++

  2. Single quotes vs. double quotes in C or C++

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

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

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

    24935
    97
    1, 4, 4, 4
    

2 个答案:

答案 0 :(得分:5)

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

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

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

您的值为24935 = 0x6167,因此您获得较高字节中的'a'和较低字节中的'g'

答案 1 :(得分:3)

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

  

6.4.4.4

     

整数字符常量的类型为int。整数的值   包含映射到a的单个字符的字符常量   单字节执行字符是数值   解释为整数的映射字符的表示形式。该   包含大于的整数字符常量的值   一个字符(例如,'ab'),或包含字符或转义符   没有映射到单字节执行字符的序列是   的实施德音响奈德

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