简图记录学习~
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码记忆点
45~57为字符0~9;65~90为大写英文字母;97~122为小写英文字母;32为空格;0为空字符;