博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

switch_case ‘ 多字符’

Posted on 2012-11-05 23:55  蜗牛57  阅读(445)  评论(0编辑  收藏  举报

  今天同学碰巧发现了一个关于 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写,就会出错,单引号中间只能放一个字符。

  估计是编译器不一样,标准不一样。