🔷 第六章 函数
📄 一句话概括

空函数 = 只干活、不交结果的函数,返回类型写 void。"空"指的是返回值的位置空着,不是函数体里什么活儿都不干。判断该不该用 void 只看一件事:这个结果我需不需要接回来——不需要,就用空函数。

📝 本节和前面几节的关系

6.2 讲了函数的两个口,这一节专讲"出口关掉"的那一类。void 你不是第一次见——2.1.4 拆 main 时前面站的是 int(它其实也要交一个退出码,2.1.6 讲过),而 1.3.2 的 Hello World 里那个"跑完就结束"的结构就是这个套路。另外,本节 Demo 里会出现"空函数调用别的函数",那是 6.3.2 嵌套调用的预告。

一、空函数的两种形态

void sayHello() {                 // 形态一:不收料、不出货
    cout << "Hello" << endl;
}

void printStars(int n) {          // 形态二:收料,但不出货
    for (int i = 1; i <= n; i++) cout << "*";
    cout << endl;
}

两种都是空函数:返回类型是 void,区别只在"收不收料"。它们的共同点——调用的效果不通过"返回值"体现,而是体现在屏幕上、文件里、或者它改动的数据上。

二、什么时候该用空函数(三种典型用途)

用途 例子 判断法
只输出 打印菜单、画分隔线、提示信息 干完就完了,没有"结果"要交出去
只操作 清屏、暂停、写文件、改全局状态 效果发生在函数外面(屏幕/文件/全局变量)
占位与框架 先把 init() / process() / cleanup() 搭出来,细节以后填 结构先立起来,函数体可以先空着

反面清单(这些别用 void): - 计算结果(求和、求平均、求最大值)→ 必须把结果交回来 - 判断结果(是不是素数、是否登录成功)→ 交回 bool - 查找结果(找到了吗、在第几个)→ 交回下标或指针

三、动手 Demo:给程序配一套"装饰"函数

#include <iostream>
using namespace std;

void printLine() {                          // 只输出
    cout << "====================" << endl;
}

void printMenu() {                          // 只输出,一条条列
    printLine();                            // 空函数里也能调别的函数
    cout << "  1. 录入成绩" << endl;
    cout << "  2. 查看成绩" << endl;
    cout << "  0. 退出" << endl;
    printLine();
}

void printStars(int n) {                    // 收料、不交结果
    for (int i = 1; i <= n; i++) cout << "*";
    cout << endl;
}

int main() {
    printLine();
    printMenu();
    printStars(10);
    return 0;
}

看到什么算成功:

====================
====================
  1. 录入成绩
  2. 查看成绩
  0. 退出
====================
**********

为什么第一行是单独的一条分隔线:main 先喊了 printLine(),接着 printMenu() 内部自己也喊了一次,所以连着出现两行。

30 秒实验:把 int main() 改成 void main() 试试——Dev-C++ 可能放你过,但这是不合标准的写法(标准要求 main 必须返回 int)。这个实验的意义是记牢一句话:"能编过"不等于"合规矩"。改回来。

四、常见误区

  1. "void 函数里不能写 return"——return;(不带值)合法,作用是"提前收工";只有 return 值; 不合法。
  2. "空函数的调用可以当值用"——不行。cout << printLine();、int x = printLine(); 都编不过。把 void 调用当独立语句写。
  3. "空函数就是没用的函数"——反了。把"怎么打印菜单"收进函数,main 才读得出流程。
  4. "函数体空着才叫空函数"——两回事。void f() { } 是"返回值空 + 函数体也空";void f() { 一堆语句 } 才是最常见的空函数(空的是返回值)。
自测三问(点开对答案) 1. 空函数的标志是什么?——返回类型写 `void`(不收结果)。 2. `void f() { return; }` 合法吗?——合法,表示提前结束;但 `return 5;` 不合法。 3. 什么时候不该用 void?——需要把结果交给调用方时(计算、判断、查找类函数)。

相关笔记