C Primer Plus精读(五)

第五章运算符、表达式和语句

C::本章中你将窥其大概

5.1循环简介

5.2基本运算符

5.2.1赋值运算符=

bmw = 2002;
这个2002叫做右值(rvalue)/这边可以看出翻译的水平高超/
现在叫做表达式的值,听到右值这种说法且非常强调的,怕是当年没有好好学习,只是会写一点代码,没有深刻理解的。
只能字面常量。
接下来语言非常严谨,不是简单的左值(lvalue)而是有前缀的可修改的,为什么因为const修饰的变量是变量不是常量,但也不可以修改。
C可以多重赋值。

5.2.2加法运算符

5.2.3减法运算符

5.2.4符号运算符:-和+

这两个东西还同时是一元运算符。

5.2.5乘法运算符:*

1.指数增长//这边居然只有一个小结

这本书的例子就比我们学校的算盘的例子不知道高到哪里去了。

5.2.6 除法运算符:/

5.2.7运算符优先级

还有表达式树这种操作。。。以前我都学了啥呀。。。

5.2.8优先级和求职顺序

5.3其他运算符

5.3.1sizeof运算符和size_t

5.3.2求模运算符:%

5.3.3递增运算符:++

很多时候a++;a = a + 1;是不一样的,有一些编译器可能会吧后者优化成为前者,但只是有一些,要想想如果没有优化,后者需要先读取在赋值……这是两个不同的操作,在见识到大佬的多线程编程之后,你会发现不知道CPU到底是什么时候读取到了什么值。。。
当然也可能就是像手动把a*2写成a<<1这样滑稽的形式一般的多此一举,实际上通过汇编会发想编译器把这两个东西识别成一个。。。哈哈。

5.3.4递减运算符:–

5.3.5优先级

5.3.6不要自作聪明

书上说的比较拗口,其实就是不要写出一些看似很秀的代码。。。

5.4表达式和语句

5.4.1表达式

运算符+运算对象=每个表达式都有一个值

5.4.2语句

statement这个玩意被翻译叫做语句还行,但感觉不是最好,应该翻翻字典好好体会下。
但是:
C::根据C标准,声明不是语句。这与C++有所不同
//statement确实可以被翻译作声明……
C::在C语言中赋值和函数调用都是表达式。
这边有谈到各种语句,忘记的可以回去看C Primer Plus 精读(二)中的2.2示例解释。
多条语句要用大括号括起来,(在好好思考过后感觉好多好多人先学的Python)和Python等TAB格式语言不同。
以及滑稽的副作用这个称呼和一个序列点,但交流过程中是我好像没有碰到过有人一本正经的用这两个词语的。

5.4.3复合语句(块)

花括号里的东西整个叫做复合语句。
//C就会有风格问题和python不一样这个倒是在日常讨论中总是互相调侃。

5.5类型转换

有一个升降级的简单的概念
C::当作为函数参数传递时,char和short会被转换成int,float会被转换成double,第9章讲介绍,函数原型会覆盖自动升级这个坑写到第九章再回来填。

到这边作者去学习了点别的东西,隔了好久回来才写的。

这边有提到lint程序检查工具,于是就去百度了一下得到了中文名:lint,外文名:21323,这样奇葩的答案。
大概就是对源程序中不可移植的代码;可疑的类型组合;未使用的变量提出警告?

  • 可能的空指针
  • 释放内存后指向内存的指针
  • 赋值次序
  • 拼写错误(惊啦)
  • 被0除
  • 失败的case(遗漏break)这个 东西好像我经常被IDE指出?
  • 不可移植的代码
  • 宏参数没有使用圆括号
  • 符号的丢失
  • 异常的表达式
  • 变量没有初始化
  • 可疑的判断语句
  • printf/scanf的格式检查

上面这排东西来源百度,现代IDE应该都直接能做到了。

5.5.1 强制类型转换运算符

C语言的原则:避免给程序员设置障碍,但是程序员必须承担使用的风险和责任。0

5.6 带参数的函数

形参是变量,实参是函数调用提供的值,实参被付给相应的形参。
这句看得真的是晕乎……

5.7 示例程序

5.8 关键概念

C::这会影响你成为一名优秀的程序员。
C会进行自动类型转换。 尽管如此不要养成依赖自动类型转换的习惯,应该显示选择合适的类型或使用强制类型转换。

5.9&5.10小结

C::定义带一个参数的函数时,便在函数定义中声明了一个变量,或称为形式变量。然后,在函数调用中传入的值会被赋值给这个变量。
这句话,得好好想想声明和定义的区别。他实际上漏掉了函数中变量声明和赋值之间的定义过程,在函数体开始的时候,才会分配内存(栈上)。

你可能感兴趣的:(C精读,c语言)