#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上运行时,我曾经对这个问题的输出有很多怀疑。
但我通过引用这些链接已经清除了几乎所有的疑问:
我仍然需要了解这个问题的输出。
有人可以在程序中解释上面提到的printf("%d\n",'ag');
的输出。它是如何实际存储在内存中的?
Linux / GCC平台上程序的输出是:
24935
97
1, 4, 4, 4
答案 0 :(得分:5)
单引号文字的类型为int
。因此,大小通常足以容纳多个字符的位数。据我所知,解释字符的确切方式是依赖于实现。
在你的情况下,你得到一个小端序:
'a'
的ASCII值为97(0x61)'g'
的ASCII值为103(0x67)您的值为24935 = 0x6167,因此您获得较高字节中的'a'
和较低字节中的'g'
。
答案 1 :(得分:3)
单引号中的多个字符是实现定义的。
6.4.4.4
整数字符常量的类型为int。整数的值 包含映射到a的单个字符的字符常量 单字节执行字符是数值 解释为整数的映射字符的表示形式。该 包含大于的整数字符常量的值 一个字符(例如,'ab'),或包含字符或转义符 没有映射到单字节执行字符的序列是 的实施德音响奈德强>
例如,在这种情况下,24935
为0x6167
:字符a
和g
的ASCII值并排。