Skip to content

第 6 章:语法小结与常用工具

本章能学到什么

  • 数组:C++ 版的"列表"
  • 自定义函数(含返回值和参数)
  • #include 与库的概念

三大结构回顾

结构C++ 写法对应 Python
顺序逐行执行一样
判断if () {} else if () {} else {}if: / elif: / else:
循环for (;;) / while ()for in range() / while

数组:定长、同类型的"列表"

cpp
int pins[4] = {10, 11, 12, 13};   // 四个循迹探头的引脚号
int readings[4];                   // 声明一个能装 4 个 int 的数组

Serial.println(pins[0]);           // 10(下标也是从 0 开始)

for (int i = 0; i < 4; i++) {
  Serial.println(pins[i]);
}

和 Python 列表的区别:

C++ 数组Python 列表
长度声明时定死随意增减
元素类型必须相同可以混合
遍历for (i=0; i<4; i++)for x in list

第 12 章读四路循迹时,会看到数组配合 for 的实际用法。

自定义函数

cpp
// 返回值类型 函数名(参数类型 参数名) { ... }
float measureDistance() {
  // 触发超声波……(第 10 章完整实现)
  return 18.5;
}

void setLed(int pin, bool on) {   // void 表示"不返回值"
  digitalWrite(pin, on ? HIGH : LOW);
}

void setup() {
  Serial.begin(115200);
  float d = measureDistance();    // 调用
  Serial.println(d);
}
void loop() {}

和 Python def 的关键差异:必须声明返回值类型和参数类型。不返回值就写 void

#include:借用现成的库

cpp
#include <Servo.h>    // 引入舵机库(第 11 章用)
#include <Wire.h>     // 引入 I2C 库
  • #include <库名.h>:引入系统/已安装的库
  • 相当于 Python 的 import,但发生在编译期

常见坑

  • 数组下标越界在 C++ 里不报错,但会读到垃圾数据甚至改坏别的变量,比 Python 危险
  • 函数要在调用之前定义(或声明),否则编译报 "was not declared in this scope"
  • #include 后面不加分号

想一想

为什么 C++ 的数组不能像 Python 列表那样随意添加元素?这和单片机内存小有没有关系?

💡 查看答案

有直接关系。C++ 数组在编译时就要确定占多少内存,之后不能变——因为单片机内存只有几百 KB,必须精打细算、提前规划。Python 列表能随意增长,是因为电脑内存大、还有运行时在背后自动管理内存;这套"管家服务"本身就要消耗资源,单片机吃不消。C++ 的严格,换来的是快和省。

不积跬步,无以至千里;万里之行,始于当下。