这里发生了什么?
#include <stdio.h>
int main (void)
{
int x = 'HELL';
printf("%d\n", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印 1212501068
我期待编译错误.
欢迎解释=)
NPE*_*NPE 13
1212501068十六进制是0x48454c4c.
0x48是ASCII代码H.0x45是ASCII代码E.0x4c是ASCII代码L.0x4c是ASCII代码L.请注意,此行为是实现定义的,因此不可移植.一个好的编译器会发出警告:
$ gcc test.c
test.c: In function 'main':
test.c:4:11: warning: multi-character character constant [-Wmultichar]
Run Code Online (Sandbox Code Playgroud)
在C中,单引号用于表示字符,这些字符在数字内存中表示.当您在单引号中放置多个字符时,编译器会将它们组合在一个值中,但只要它记录该过程.
查看您的号码,1212501068是0x48454C4C.如果将此数字分解为字节,则得到48"H" 45或"E"两次4C或"L"