符号的技巧
专题二:符号的技巧。包括以下章节:
- 注释符号
- 接续符和转义符
- 单引号和双引号
- 逻辑运算符使用分析
- 位运算符分析
- ++、–操作符使用分析
- 优先级和类型转换分析
问题
- 讨论这个问题有意义吗?
#include <stdio.h>
int main()
{
char* p1 = 1; //p1指向内存地址为1的地方。赋值会出现警告,不会编译出错。
char* p2 = '1';//p2指向内存地址为49的地方('1'=49)。
char* p3 = "1";//p3指向内存中的字符串"1"常量的地址。
printf("%s, %s, %s\n", p1, p2, p3);//低位的内存地址是给操作系统使用的,不能访问。如果访问会出现段错误。
printf('\n');//printf第一个参数是char* fmt,相当于char* fmt = 10。('\n'=10)
printf("\n");
return 0;
}
单引号和双引号
- c语言中的单引号用来表示字符常量
- c语言中的双引号用来表示字符串常量
‘a’表示字符常量,在内存中占1个字节,’a’+1表示’a’ASCII码+1,结果为’b’;
“a”表示字符串常量,在内存中占2个字节(’a’和’\0’),”a”+1表示指针运算,结果指向”a”结束符’\0’。
实例分析3-1:混淆概念的代码
3-2.c
#include<stdio.h>
int main()
{
//将字符串" "赋值给字符c:表示将一个字符串的内存地址赋值给字符c。假如字符串" "的在内存中的地址是0xAABBCCDD,那么字符c值未0xDD。(取最后两位)
char c = " ";
//c的值0xDD,与"\t"的地址值," "的地址值,"\n"的地址值比较
while(c == "\t" || c == " " || c == "\n")
{
scanf("%c", &c);
}
return 0;
}
编译结果:
正确的写法:
3-3.c
#include<stdio.h>
int main()
{
char c = ' ';
while(c == '\t' || c == ' ' || c == '\n')
{
scanf("%c", &c);
}
return 0;
}
结果:
小结
- 本质上单引号括起来的一个字符代表一个整数
- 双引号括起来的内容代表一个字符串,一个指针(字符串常量所在的内存地址)
- c编译器结束字符和字符串的比较,可意义是错误的
- c编译器允许把字符串赋值给一个字符变量,但是没意义
本文深入探讨了C语言中各种符号的使用技巧,包括注释符号、接续符和转义符、单引号和双引号的区别及应用场景,通过实例分析了逻辑运算符、位运算符等的使用,并对++、--操作符、优先级和类型转换进行了详细的分析。
2615

被折叠的 条评论
为什么被折叠?



