运算符
算术 + - * / %
/ % 除数不能为零,会出现浮点数例外。
关系 > < >= <= == !=
与数学的运算规则不同
1 < a < 9 C语言中永远为真
先运算 1 < a 结果是 0或1 < 9
== 右值放在左边,防止少写=
a == 100
a = 100 不报错,但程序运算不正确
100 == a
100 = a 会立即报错
自变 ++/–
对变量的值进行加1或减1操作,只有变量才能使用。
前自变:立即有效
后自变:下一行代码才有效
前自变要比后自变的运行效率高,但是编译器会对后自变量进行优化,如果单独使用后自变后优化成前自变。
不要一条语句过多使用自变运算符,不同的编译器对自变运算符的解释顺序不同。
逻辑 && || !
注意&&、||知道特性,当运算符左边的值可以确定运算结构,则右边的表达式不再计算,也可以利用这短路特性写出精简的分支结构。
三目 [1] ? [2] : [3];
根据1中的值,为真计算2,否则计算3,相当于精简的if/else结构。
注意不能使用流程控制语句。
位 & | ~ ^ << >>
^ 按位异或,对应的二进制位,相同行0,不同得1。
m << n m二进制位整体左移n位,后面补0
m >> n m二进制位整体右移n位,前面补0(无符号)或符号位(有符号)。
类型转换
自动类型转换
C语言规定只有相同类型的数据才能在一起运算,由不同类型的数据组成的表达式要先转换成同一种类型再运算,以不丢失数据为基准。
整型 转 浮点
字节少 转 字节多
有符号 转 无符号
强制类型转换
(目标类型)数据 ,这种转换可能会造成数据丢失,因此慎重使用。
流程控制
分支
if else
大括号可以省略,但这样安全差,不利于扩展,因此不建议。
大多数公司要求,杜绝省略大括号。
switch 是一种开关语句,小括号中的数据必须是整型数据或表达式。
case 后的数据只能常量或枚举,不能使用变量。
break 关闭执行开关
default 所有case都不能匹配时,打开执行开关,无论写在任何位置都最后判断。
循环
for([1];[2];[3])
{
[4]
1234模块都可以缺少,只要保证格式正确即可。
1模块只有C99以上的标准中才能定义变量。
}
是一种非常灵活的循环,非常容易出错,一般使用一个整型变量(循环变量)来引导for循环的执行,index->i,j
while 相当于for循环的精简版本,for(;[];)与while功能一致,但是代码不优雅,while负责循环次不确定的情况,for负责循环次数确定的情况。
do while 先执行循环休,再判断循环条件的循环,循环体至少执行一次。
注意:do while小括号后必须要有分号,if、for、while括号后不能有分号(不是语法错,而是逻辑错误)。
跳转goto
可以在函数内的任意位置跳转,它可能破坏原有分支、循环结构,因此危险性很高,一般公司都禁止使用。