📄 一句话概括
函数对外只有两个口:入口是参数(把料送进去)、出口是返回值(把结果接回来)。这一节把两个口讲透——空函数(没进也没出)、形参实参(进的到底是谁)、默认参数与可变参数(进的可以很灵活)、返回值(出的规矩)。
📝 本节和前面几节的关系
6.1 已经能写出函数了,但那些函数的"进出口"都还很简陋。这一节专攻进出口的规矩。用的全是旧零件:参数就是 2.3.2 的变量声明、返回类型就是 2.4 的类型系统、void 你在 2.1.4 见过(main 前面是 int,不交结果的函数就写 void)。
一、函数的两个口
| 口 | 名字 | 方向 | 数量 |
|---|---|---|---|
| 入口 | 参数 | 调用方 → 函数 | 0 个、1 个或多个都行 |
| 出口 | 返回值 | 函数 → 调用方 | 最多 1 个 |
一句话记牢:入口可以多,出口只能一个。
这条限制很硬:本章没有办法让一个函数"同时交回两个结果"。真需要时有两个绕法——① 把结果打包成一个东西再交(第 7 章的结构体会讲);② 用"传地址"让函数直接改调用方的变量(第 7 章的指针、第 8 章的引用)。现在先把这个限制记在心里,遇到"我只想返回两个值"时就知道该等哪一章。
二、这一节五篇怎么分工
- 6.2.1 空函数——
void f():没料进、没货出,纯干活。 - 6.2.2 形参与实参——同一个参数的两个身份:定义时叫形参(占位的空盒子),调用时叫实参(真送过去的货)。
- 6.2.3 默认参数——调用时可以不填,函数自动用兜底值。
- 6.2.4 可变参数——参数的个数都能不固定(
printf就是这么干的)。 - 6.2.5 返回值——
return的规矩:类型要匹配、只能带一个、一执行就退出函数。
三、动手 Demo:一次看清"进"和"出"
#include <iostream>
using namespace std;
int add(int a, int b) { // 两个入口
return a + b; // 一个出口
}
void showResult(int value) { // 一个入口、没有出口(void)
cout << "结果是 " << value << endl;
}
int main() {
int r = add(7, 8); // 7 和 8 从入口进,15 从出口出来
showResult(r); // r 从入口进,什么都不出来
return 0;
}
看到什么算成功:输出 结果是 15。
注意 showResult(r); 这一句:它没有返回值,所以不能写 int x = showResult(r);——那相当于"从一台不出货的机器上取货",编译器会直接拦下。这是 void 最实在的一条约束。
30 秒实验:故意加一行 int x = showResult(5);,编译看报错(信息大意是"void 值不能被使用"),然后删掉。看见 void 就不能接货——这个直觉 6.2.1 会再强化一次。
四、常见误区
- "参数越多越万能"——参数超过 4~5 个就是信号:要么函数管得太杂,要么该把几个参数打包成一个整体(第 7 章)。
- "
void函数里不能出现 return"——return;是合法的(表示"提前收工"),只有return 值;不合法。 - "函数可以返回两个结果"——本章不行。两条口只有一条出口,这是设计上的硬边界。
- "形参名要和实参名一样"——毫无关系。参数名只在函数体内部使用,调用方根本看不见它。
自测三问(点开对答案)
1. 函数的入口和出口分别叫什么?——入口是参数,出口是返回值。 2. 参数可以有多个,返回值能有几个?——最多一个。 3. `int x = void函数();` 为什么编不过?——`void` 表示没有返回值,没有货可接。- ☐ 6.2.1 空函数(下一节)
相关笔记
- 函数的定义 —— 四个部件里就有参数表和返回类型
- 变量的声明及赋值 —— 参数本质就是变量声明
- 数据类型 —— 返回类型与参数类型的来源
- 🔷 C++基础 · 索引 —— 全课路线图