今天同学碰巧发现了一个关于 Switch-Case 的怪问题 下面是C写的。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 // switch("abc"){ 7 //case "abc": 8 switch('abc'){ 9 case 'abc': 10 printf("Hello world!\n"); 11 printf("%d\n",'abc'); 12 printf("%c\n",'abc'); 13 printf("%s\n",'abc'); 14 break; 15 default: 16 printf("sdfsf"); 17 break; 18 } 19 return 0; 20 }
代码如上所示,如果用双引号,最后编译都通不过。但是改成单引号,虽然有 warning,但是有结果输出。
网上找到的解释是:
'abc'这样的称为多字符常量,实际上是一个整数,其值的每个字节为字符的ASCII码值。
用%x打印,所以打印出0x616263,但是这个顺序和计算机系统的大小端内存表示相关,也有可能出现0x636261的情况;
如果用%c打印,只是取一个字节,所以会出现c,但也有可能出现a,这个也是和大小端有关系。
建议楼主不要使用这种问题,跟自己找麻烦!
囧 成了给自己找麻烦了。。。不过还是谢谢网友。
如上所示,如果用java写,就会出错,单引号中间只能放一个字符。
估计是编译器不一样,标准不一样。