Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第四十章:变量、类型与表达式

复习

  • 高级语言让程序员描述结果,不必逐条安排机器指令。
  • 源程序中的一句话仍会在下层变成对数据和电路的操作。

TL;DR

  • 变量用名字表示一个可保存、可读取和可更新的值。
  • 类型说明一串位应怎样解释,以及允许做哪些操作。
  • 表达式计算出值,赋值语句把值交给变量。

正文

  先看一段非常普通的程序:

int apples = 3
int pears = 5
int total = apples + pears

  applespearstotal变量。可以把变量暂时想成贴着名字的盒子:程序可以从盒子里取值,也可以把新值放进去。total = apples + pears 先算右边的和,再把结果放入左边的 total。等号在这里不是数学上的“永远相等”,而是一项把值交出去的动作,称为赋值

  盒子里归根到底仍是一串位。可同样的 01000001,可以被解释为整数 65、字符 A,也可能只是某种颜色的一部分。于是语言用类型说明如何看待这些位。上例的 int 表示整数;常见的还有小数、字符、真假值等。类型还会限制操作:两个整数可以相加,但把一个文件名和一个温度直接相加通常没有意义。

  apples + pears 是一个表达式。表达式会产生一个值,正如数学式 3 + 5 会得到 8。它可以更复杂:

total = (apples + pears) * 2

  括号、运算符和变量名共同告诉程序应按何种顺序计算。翻译工具会据此检查部分错误,并选择相应的加法、乘法等底层操作。变量的名字通常只是源程序里的便利;运行时,值仍要被放到寄存器或内存的某处。

  到这里,程序能计算数据了。但它还像一张从上读到下的清单:每句话都只执行一次。若要根据结果作出选择,或反复做同一件事,就需要控制程序前进的路线。

思考题

score = score + 1 为什么不是自相矛盾的数学等式?

小结

知识点

  • 变量是可通过名字读写的值。
  • 类型给位模式赋予解释,并约束可进行的操作。
  • 表达式产生值,赋值把值保存到变量中。

参考资料

  • Robert Sedgewick、Kevin Wayne,《程序设计导论》

思考题答案(仅供参考)

  它表示先读取旧的 score,算出旧值加 1 的结果,再用新结果覆盖 score。这是一项按时间发生的程序动作。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。