1. if语句介绍
(1)if(表达式)
{
语句列表1;
}
else
{
语句列表2;
}
if的表达式结果为真,执行语句列表1,否则执行语句列表2。
(2)if(表达式1)
{
语句列表1;
}
else if(表达式2)
{
语句列表2;
}
else
{
语句列表;
}
if的表达式1结果为真,执行语句列表1,表达式2结果为真,执行语句列表2,否则执行语句列表3。
注意:else会与之前的最近的没配对的if配对,写代码时,要注意不能写出悬空else
2. 浮点数、指针、整型、布尔型变量和零的比较
(1)浮点数与零
设置一个能够接受的精度exp,保证误差在允许范围内即可。
(2)指针与零
不知道给指针赋什么值时,就赋空即NULL;
赋空后,要判断,不为NULL时才能使用。
(3)整型与零
== 表示判断;= 表示赋值
(4)布尔型变量与零
布尔型变量一般用true表示真,false表示假。
若定义一个整型变量a,a为0时表示假,非0时表示真。
3. switch语句介绍
switch(常量表达式)
{
语句项;
}
switch和case后必须跟常量表达式;
每个switch语句中只有一个default语句;
case语句无前后顺序;
真正实现分支的其实是break。
4. goto语句介绍
可以实现在函数中任意跳转。建议少用,容易出错。在深层嵌套的结构的处理过程中,可以使用使得代码简化。
5. 各种操作符的介绍
(1)算术操作符
+ - * / %
1)除了%操作符之外,其他的几个操作符可以作用于整数和浮点数
2)对于/操作符,若两个操作数都为整数,执行整数除法。而只要有浮点数参与操作,执行的就是浮点数除法
3)%操作符的两个操作数必须为整数,返回整除之后的余数
(2)移位操作符
<< 左移操作符(左边抛弃、右边补0)
>> 右移操作符(逻辑移位:左边补0,右边丢弃;算术移位:左边补符号位,右边丢弃)
注:对于移位操作符,不要移动负数位
(3)位操作符
& 按位与
| 按位或
^ 按位异或
注:操作数必须是整数
(4)赋值操作符
=
+= -= *= /= %= >>= <<= &= |= ^=(复合赋值操作符)
(5)单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
(6)关系操作符
< > == <= >= !=
(7)逻辑操作符
&& 逻辑与
|| 逻辑或
得到的结果是真或假,要注意区分它们与位操作符
(8)条件操作符
exp1 ? exp2 : exp3
若exp1的结果为真,执行exp2,否则执行exp3
(9)逗号表达式
exp1, exp2, exp3 … expN
从左向右依次执行,整个表达式的结果是最后一个表达式的结果
(10)下标引用、函数调用和结构成员
1)下标引用[ ]
操作数:一个数组名 + 一个索引值
2)函数调用操作符()
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3)访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
6. 表达式的求值
表达式求值的顺序是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。
(1) 隐式类型转换
(2) 算术转换
7. 影响表达式求值的因素
操作符的优先级、结合性,以及是否控制求值顺序
注:不能写出依赖求值顺序的表达式,因为它是不可移植的
8. 整型提升
C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。
9. 算术转换
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。
下面的层次体系称为寻常算术转换(从下向上转化)
long double
double
float
unsigned long int
long int
unsigned int
int