简图记录学习~
C语言基本符号有20多个,每个符号在不同场景可能存在不同含义,并且还可以组合使用,可以说比较复杂。
一、注释符号
C语言注释符号有/.../ 和 \两种,注意要点如下:
(1)/.../编译器将会在预编译时替换为空格而不是简单剔除,如int/.../a;写法合法而in/.../t a;不合法;
(2)/.../不可嵌套使用;
(3)注意y=x/*p编译时会报错,编译时会先识别为注释符,可以写为y=x/(*p)或者y=x/ *p;
(4)注意//会注释到行尾部,如果该行行尾有续接符\要把接下来一行也作为注释。
二、反斜杠\符(有 续接符 和 转义符 两种功能)
续接符:当\出现在行尾,注意后面不能再有任何字符 如空格 作为续接符号,编译器在编译时会剔除掉\并将下一行的内容自动接到当前行尾部。如:
/\
/这是一条合法的注释
#defin\
ine MAX(a,b) (a>b?a:b)
转义符:和普通字符一样,出现在单引号或者双引号中时\将识别为转义符 尝试进行转义。共3种用法:
(1)8进制数表示ASCII,\加8进制数--->如'\141'表示'a';
(2)16进制数表示ASCII,\x加16进制数--->如'\x61'表示'a';
(3)特殊字符表示,\加特殊字符,包含 响铃\a 退格\b 换页\f 换行\n 回车\r 水平制表符\t 垂直制表符\v 表示一个反斜杠符\ 表示一个单引号' 表示一个双引号符" 表示一个问号?;
转义字符使用要点:1、只能接小写字符; 2、如果\后不匹配转义那么\会被忽略,如printf("a\Bc")实际输出aBc;3、注意\0 是NULL空字符而非字符0,0ASCCII码为48
三、单双引号
注意'x'为一个字符而“x”为一个字符串还包含一个\0字符。
四、逻辑运算符||和&&
注意||当第一个条件为1不会执行第二个条件,&&当第一个条件为0也不会执行第二个条件。如
int i=0,j=0;
if ((++i>0) || (++j>0))
{
printf("i=%d j=%d\n",i,j);
}
/*实际i=1,j=0*/
五、预算符优先级
| 优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | ||||
| 1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | ||||
| () | 圆括号 | (表达式)/函数名(形参表) | ||||||
| . | 成员选择(对象) | 对象.成员名 | ||||||
| -> | 成员选择(指针) | 对象指针->成员名 | ||||||
| 2 | - | 负号运算符 | -常量 | 右到左 | ||||
| (类型) | 强制类型转换 | (数据类型)表达式 | ||||||
| ++ | 自增运算符 | ++变量名/变量名++ | ||||||
| -- | 自减运算符 | --变量名/变量名-- | ||||||
| * | 取值运算符 | *指针变量 | ||||||
| & | 取地址运算符 | &变量名 | ||||||
| ! | 逻辑非运算符 | !表达式 | ||||||
| ~ | 按位取反运算符 | ~表达式 | ||||||
| sizeof | 长度运算符 | sizeof(表达式) | ||||||
| 3 | / | 除 | 表达式/表达式 | 左到右 | ||||
| * | 乘 | 表达式*表达式 | ||||||
| % | 余数(取模) | 整型表达式/整型表达式 | ||||||
| 4 | + | 加 | 表达式+表达式 | 左到右 | ||||
| - | 减 | 表达式-表达式 | ||||||
| 5 | << | 左移 | 变量<<表达式 | 左到右 | ||||
| >> | 右移 | 变量>>表达式 | ||||||
| 6 | 大于 | 表达式>表达式 | 左到右 | |||||
| >= | 大于等于 | 表达式>=表达式 | ||||||
| < | 小于 | 表达式<表达式 | ||||||
| <= | 小于等于 | 表达式<=表达式 | ||||||
| 7 | == | 等于 | 表达式==表达式 | 左到右 | ||||
| != | 不等于 | 表达式!= 表达式 | ||||||
| 8 | & | 按位与 | 表达式&表达式 | 左到右 | ||||
| 9 | 按位异或 | 表达式^表达式 | 左到右 | |||||
| 10 | 按位或 | 表达式 | 表达式 | 左到右 | ||||
| 11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | ||||
| 12 | 逻辑或 | 表达式 | 表达式 | 左到右 | ||||
| 13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | ||||
| 14 | = | 赋值运算符 | 变量=表达式 | 右到左 | ||||
| /= | 除后赋值 | 变量/=表达式 | ||||||
| *= | 乘后赋值 | 变量*=表达式 | ||||||
| %= | 取模后赋值 | 变量%=表达式 | ||||||
| += | 加后赋值 | 变量+=表达式 | ||||||
| -= | 减后赋值 | 变量-=表达式 | ||||||
| <<= | 左移后赋值 | 变量<<=表达式 | ||||||
| >>= | 右移后赋值 | 变量>>=表达式 | ||||||
| &= | 按位与后赋值 | 变量&=表达式 | ||||||
| ^= | 按位异或后赋值 | 变量^=表达式 | ||||||
| = | 按位或后赋值 | 变量 | =表达式 | |||||
| 15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | ||||
容易出错的计算:
(1)a.p为(a.p)对成员取值 ;
(2)**int a[10]为int (a[10])指针数组;
(3)int *f()为int *(f())函数 ;
(4)if (val & mask!=0)为if(val&(mask!=0))先计算!=符;
(5)msk <<4+1为msk<<(4+1)先计算+ ;
(6)c=getchar()!=EOF为c=(getchar()!=EOF) ;
六、整除与取余问题
若a=m/n;b=m%n;
(1)必须满足a*n+b=m;(2)当m,n同号时a为正,异号a为负;(3)取余数时b符号和m一致。
如:3/-2=-1 3%-2=1; -3/2=-1 -3%2=-1; -3/-2=1 -3%-2=-1;
七、ASCII码记忆点
4557为字符09;6590为大写英文字母;97122为小写英文字母;32为空格;0为空字符;
\