1月11日 C Primer Plus学习
5.3.1 sizeof 运算符和size_t 类型
sizeof 运算符以字节为单位返回运算对象的大小。
运算对象可以是具体的数据对象或类型。如果运算对象是类型,则必须使用括号将其括起来。
C 语言规定,sizeof 返回size_t 类型的值。这是一个无符号整数类型,但它不是新类型。
C 有一个typedef 机制,允许程序员为现有类型创造别名。例如:typedef double real;
这样,real 就是double 的别名。现在可以声明一个real 类型的变量:real deal;
编译器查看real 时会发现,在typedef 声明中real 已成为double 的别名,于是把deal 创建为double 类型的变量。
类似地,C 头文件系统可以使用typedef 把size_t 作为unsigned int 或unsigned long 的别名。
5.3.2 求模运算符:%
求模运算符用于整数运算。
求模运算符给出其左侧整数除以右侧整数的余数。
求模运算符只能用于整数,不能用于浮点数。
第一个运算对象是负数,那么求模的结果为负数;第一个运算对象是正数,那么求模的结果是正数。
5.3.3 递增运算符:++
递增运算符执行简单的任务,将其运算对象递增1.
递增运算符前缀模式和后缀模式的区别在于递增行为发生的时间不同。
递增运算符的一个优点是,通常它生成的及其语言代码效率更高,因为它和实际的机器语言指令很相似。
随着商家退出的C 编译器越来越智能,这一优势可能会消失。
一个智能的编译器可以把x = x + 1 当作++x 对待。
5.3.4 递减运算符:--
每种形式的递增运算符都有一个递减运算符与之对应。
5.3.5 优先级
递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高。
因此,x*y++ 表示的是(x) * (y++) ,而不是(x * y)++ 。
后者是无效的,因为递增和递减运算符只能影响一个变量(可修改的左值)。
5.3.6 不要自作聪明
如果一次用太多运算符,自己都会糊涂。
-
如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或递减运算符。
-
如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符。
浙公网安备 33010602011771号