您的位置:首页 > 文旅 > 旅游 > C Primer Plus 第5章——第二篇

C Primer Plus 第5章——第二篇

2024/12/23 11:00:14 来源:https://blog.csdn.net/weixin_45641816/article/details/140897813  浏览:    关键词:C Primer Plus 第5章——第二篇

你该逆袭了

第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号字
红色
绿色
蓝色

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com