1
几个常见的运算符的优先级
() > +-(一元运算符) > */ > +-(二元运算符) > =
括号 正负 乘除 加减 等号
2
sizeof 运算符是以字节为单位返回其操作数的大小。
sizeof不是函数
3
typedef double real;
使real成为double的别名。
4
取模运算符: % 只用于整数。
不要对浮点数使用该运算符,那将是无效的。
a % b = a - (a/b)*b 这个式子只要a和b是整数就成立,不论正负。
例子:
11 % 5 = 11 - (11/5)*5 = 1
11 % -1 = 11 - (11/-2)*(-2) = 1
-11 % -5 = -11 - (-11/-5)*(-5) = -1
-11 % 5 = -11 - (-11/5)*5 = -1
5
++ -- 增量运算符,减量运算符
通常会产生更高效的机器语言代码。
6
x*y++ 代表 (x)*(y++)
增量和减量运算符有很高的优先级,只有圆括号比他们的优先级高。
增量和减量运算符只能对变量起作用, 而 (x*y) 不是一个变量。
7
n++ 先使用n,然后将它的值增加。
++n 先将n的值增加,然后再使用它。
8
如果一个变量出现在同一个函数的多个参数中时,不要将增量或减量运算符用于它上面。
当一个变量多次出现在一个表达式里时,不要将增量或减量运算符遇于它上面。
9
顺序点
定义:一个顺序点是程序执行中的一点:在该点处,所有的副作用都在进入下一步前被计算。
例如:
语句里的分号标志了一个顺序点。
任何一个完整的表达式的结束也是一个顺序点。
一个完整的表达式:它不是一个更大的表达式的子表达式。
例子1:
while (guests++ < 10)
printf("%d \n", guests);
因为 guests++ < 10 是一个完整的表达式,C语言保证副作用进入 printf 之前发生。
例子2:
y = (4 + x++) + (6 + x++);
表达式 4 + x++ 不是一个完整的表达式,所以C语言不保证在计算子表达式 4 + x++ 之后立即增加X。
完整表达式是整个赋值语句,并且分号标记了顺序点,所以C语言保证在进入后续语句前X将被增加两次。