
一起动脑筋 · 先看一个小故事
机器人先穿鞋再穿袜子,女孩笑了:步骤都对,顺序却不对。程序也关心先后。
把过程摊开来看
- 初始score 是 3
- 先加score 变 5
- 再显示屏幕看到 5
顺序执行表示语句按规定顺序发生,后面的语句会看到前面产生的变化。
如果先输出再加分,屏幕显示的就是旧分数。判断、循环和函数调用会改变接下来执行的位置。
01代码为什么有先后顺序?
看一段最简单的程序:
int a = 3;
int b = 5;
int c = a + b;
std::cout << c;
如果没有遇到条件、循环、函数调用等改变控制流的结构,程序通常会按照语句顺序继续往下执行。
① a = 3↓② b = 5↓③ c = a + b↓④ 输出 c
02“当前执行到哪一行”是什么意思?
学习程序时,可以想象有一个“执行指针”沿着代码移动,帮助我们观察下一步会发生什么。
但这个“指针”只是教学模型,不是说 CPU 里真的有一根箭头在源代码上移动。
03一行 C++ 就是一条 CPU 指令吗?
不是。一行 C++ 代码可能生成多条机器指令,也可能经过优化后和其他代码合并,甚至被完全优化掉。
04什么会改变执行顺序?
if / else
根据条件选择不同道路。
循环
让一段代码重复执行。
函数调用
暂时去执行另一个函数。
break / continue
改变循环中的正常流程。
05为什么先后顺序很重要?
int a = 3;
int b = a + 2;
第二行要使用第一行得到的 a。如果数据还没准备好,就可能无法得到正确结果。
程序流程就是在研究:下一步执行哪里,以及为什么执行那里。
06怎样手动追踪一段程序?
执行前
a:还没有创建
第 1 行后
a = 3
第 2 行后
a = 3,b = 5
这叫做程序追踪(trace):按实际执行顺序记录变量和输出的变化。
你已经知道了什么
- 程序有明确的控制流。
- 没有其他控制结构改变流程时,语句通常按顺序继续执行。
- “执行指针”是帮助学习的模型,不是真实硬件箭头。
- 一行 C++ 不一定对应一条机器指令。
- 读程序时要同步追踪变量、条件和输出。
下一篇:if:让程序学会做选择
轮到你来试一试
先输出 score,再把它加 2,刚才屏幕上的数字会自己改变吗?
想好了吗?点开看解释
通常不会。那次输出已经完成;要显示新分数,需要再次执行输出。