5.3.1 sizeof 运算符和 size_t 类型
sizeof 的运算对象可以是具体的数据对象 (如变量名) 或类型:
- 如果是类型, 需要用圆括号括起来

sizeof 返回 size_t 类型的值:
- 无符号整数类型
typedef 用于创建类型别名:
typedef double real;real deal;
%zd 用于打印 size_t 类型, 如果不支持可用 %u, %lu 代替.
5.3.2 求模运算符: %
- modulus operator
- 余数 remainder
- 只能用于整数

负数求模:
- 第一个运算对象是正数, 求模结果也是正数; 反之为负数
C99:

标准规定: 无论何种情况, 只要 a 和 b 都是整数值, 便可通过 a - (a/b)*b 来计算 a%b .
5.3.3 递增运算符: ++
- increment operator
- 前缀模式, 后缀模式

无限循环 infinite loop.
前加, 后加例子:


前加, 后加区别:

应小心使用前加, 后加.
5.3.4 递减运算符: —
- decrement operator

- 关系运算符 relational operator
5.3.5 优先级
优先级很高, 只有圆括号比它们高.
5.3.6 不要自作聪明
自己会糊涂:
while (num < 21 ){printf("%10d %10d\n", num, num*num++);}
编译器可以自行选择先对函数中的哪个参数求值:
- 无法保证先计算哪部分
ans = num/2 + 5*(1 + num++);y = n++ + n++;
避免出错:
- 如果一个变量出现在一个函数的多个参数中, 不要使用前加后加
- 如果一个变量多次出现在一个表达式中, 不要使用前加后加
