你该逆袭了
第5 章:重点摘录
- 三、表达式和语句
- 1、表达式
- 2、语句
- (1)副作用 和 序列点
- (a)副作用
- (b)序列点
- 1、完整表达式
- 3、复合语句(块)
- 四、类型转换
- 1、强制类型转换运算符
- 2、总结:C的一些运算符
- 五、带参数的函数
- 六、关键概念
- 1、运算符的特性
- 2、算数运算符要求
- 七、本章小结
三、表达式和语句
1、表达式
(1)表达式 由 运算符 和 运算对象 组成。
(2)子表达式:c / d 是 a * (b + c / d) / 20 的 子表达式。
(3)每个表达式都有一个值。
(4)x = ++q % 3 是 表达式。
(5)6 + (c = 3 + 8) 是 表达式。
2、语句
C 把 末尾加上一个分号 的表达式都看作是一条语句(即,表达式语句)。
一条完整的指令不一定是一条语句。
8;
3 + 4;
++x;x = 6 + (y = 5);
// 该语句中的子表达式 y=5 是一条完整的指令,但是它只是语句的一部分。
// 因为一条完整的指令不一定是一条语句,所以 分号 用于识别在这种情况下的语句(即,简单语句)。
(1)副作用 和 序列点
(a)副作用
对 数据对象 或 文件 的修改。
(b)序列点
是程序执行的点,在该点上,所有的副作用都在进入下一步之前发生。在 C 语言中,语句中的分号标记了一个序列点。意思是:在一个语句中,赋值运算符、递增运算符、递减运算符对 运算对象 做的改变必须在程序执行下一条语句之前完成。后面会讨论:一些运算符也有序列点。另外,任何一个完整表达式的结束也是一个序列点。
1、完整表达式
指:这个表达式不是另一个更大表达式的子表达式。
例如:表达式语句中的表达式和while循环中的作为测试条件的表达式,都是完整表达式。
3、复合语句(块)
指:用花括号括起来的一条或多条语句,复合语句也称为 块。
四、类型转换
总结:
在 C语言中,许多类型转换都是 自动进行 的。
当 char 和 short 类型出现在 表达式里 或者 作为函数的参数(函数原型除外)时,都会被升级为 int 类型;float 类型 在函数参数中时,会被升级为 double 类型。
在 K&R C (不是 ANSI C)下,表达式中的 float 也会被升级成 double 类型。
当把一种类型的值赋给另一种类型的变量时,值将被转换成与变量的类型相同。
当把较大类型转换成较小类型时,(如 ,long 转换成 short ,或 double 转换成 float),可能会丢失数据。
根据本章介绍的规则,在混合类型的运算中,较小类型会被转换成较大类型。
(1)当类型转换出现在表达式时,无论是 unsigned 还是 signed 的 char 和 short 都会被自动转换成 int,如有必要会被转换成 unsigned int 。(特殊情况见下图)
(2)当作为 函数参数传递时,char 和 short 被转换成 int,float 被转换成 double。
(3)如果目标类型是一个 整形,且待赋值的值是 浮点数,该行为是 未定义 的。
#include <stdio.h>int main()
{//如果目标类型是一个 整形,且待赋值的值是 浮点数,该行为是 未定义 的。printf("%d\n", -23.5); //0printf("%d\n", 23.12); //1374389535
}
(4)当浮点型被降级为整数类型时,原来的浮点值会被截断。
#include <stdio.h>int main()
{//当浮点型被降级为整数类型时,原来的浮点值会被截断。printf("%d\n", (int)22.15); //22printf("%d\n", (int)-22.15); //-22return 0;
}
1、强制类型转换运算符
(int)22.38
2、总结:C的一些运算符
五、带参数的函数
#include <stdio.h>void pound(int n); // ANSI 函数原型申明int main()
{int times = 5;char ch = '!'; //ANSII 码是 33float f = 6.0f;pound(times); //int 类型的参数pound(ch); pound(f); return 0;
}void pound(int n)
{while (n-- > 0)printf("#");printf("\n");
}
形参,实参,函数调用
六、关键概念
1、运算符的特性
对象的数量、优先级、结合律
如果运算符的优先级相等,由结合律(从左往右 或者 从右往左)决定求值顺序。
2、算数运算符要求
运算对象都是相同类型的。因此,C 会进行自动类型转换。尽管如此,不要养成依赖自动类型转换的习惯,应该显示选择合适的类型或使用强制类型转换。这样,就不用担心不必要的自动类型转换。
七、本章小结
微软雅黑字体
黑体
3号字
4号字
红色
绿色
蓝色