C语言中的单引号用来表示字符字面量;
C语言中的双引号用来表示字符串字面量;
下面的片段合法么?
代码实验:
运行结果为:编译有警告,运行时段错误。
提示:
1)字符字面量被编译为对应的ASCII码;
2)字符串字面量被编译为对应的内存地址;
3)printf的第一个参数被当成字符串内存地址;
4)内存的低地址空间不能再程序中任意访问。
字符1的ASCII码的十六进制表示为31。
0x0804 8000 所有低于这个地址的空间被访问就会产生编译错误。
混淆概念的代码:
分析:
编译通过,产生警告。运行直接结束。 (混淆了字符和字符串的概念)
修改:双引号变成单引号。
char c = " sting"; //发生了什么?
分析:
1)编译后字符串“string”的内存地址被赋值给变量C;
2)内存地址占用4个字节,而变量C只占用1个字节;
3)由于类型不同,赋值后产生截断。
while( (c == "\t") || (c == " ") || (c == "\n") )
这里编译过后双引号产生的是地址值。
小结:
1)单引号括起来的单个字符代表整数;(ASCII码)
2)双引号括起来的字符代表字符指针;(内存中的一个地址)
3)C编译器接受字符和字符串的比较,无任何意义;
4)C编译器允许字符串对字符变量赋值,只能得到错误。