在单引号‘a’,char ch = 'a';
cout<<(int)ch<<endl; 得到的结果a为97;
而单引号‘abcd’,char ch = 'abcd';
cout<<(int)ch<<endl; 得到的结果为100;
请问这是什么原因?不是单引号只能是一个字符吗?谢谢解答。
C语言标准规定,单引号内表示的是字符,包括含有多个字符的多字符字面值(多数教材和社区所述的“单引号内只能包括表示一个字符的内容”的说法是常见的错误理解),也即'abcd'这种写法完全符合标准。但标准没有规定这种特殊值的含义和行为,也就是实现定义行为。C语言中有很多UB和Platform-defined/Implementation-defined Behaviors,初学者不要纠结这些,只需要知道这种东西没有规范可言,所以不要这么写就可以了。对你的例子而言,因为这是实现定义行为,它输出任何数都是符合标准的,我个人认为探讨这种没有任何规律的东西毫无意义。
补充:网络上有人试图探索这个东西的含义,不要相信。实现定义行为的含义就是不同编译器可以选择自己的实现,但是C的编译器有不下十几种,网上找到的所谓规律都是某一特定编译器的特定实现,毫无通用性可言,更与语言本身的特性毫无关系,这样的结论当然没有意义。