跳转至

函数

函数是什么

函数,是一段完成特定任务的代码。

给它起个名字,需要时用这个名字调用,就能执行这段代码。

同样的代码,不用反复抄,写成函数就能多次调用。

已经学过的库函数

函数 作用
abs、fabs 绝对值
ceil、floor、round 取整
pow、sqrt 幂运算、开平方
swap 交换
max、min 较大值、较小值

库函数是现成的,我们也可以自己写函数。

自定义函数

长这样的,就是自定义函数:

int f(int a, int b) {
    return a + b;
}

int 是返回值类型,f 是函数名,括号里的 a、b 是参数。

return a + b; 把计算结果返回给调用它的地方。

定义时,写好它怎么做;调用时,才会执行。

#include <iostream>

using namespace std;

int f(int a, int b) {
    return a + b;
}

int main() {
    int a, b;
    cin >> a >> b;

    int ans = f(a, b);

    cout << ans;

    return 0;
}

先把函数写在 main 前面,再在 main 里调用。

程序从 main 开始执行,调用 f 时进入 f,执行完再回到 main,接着往下走。

参数与返回值

参数,是调用时传进去的数据。

int ans = f(3, 5); // 返回8,存进ans

调用 f(3, 5):3 传给 a,5 传给 b,算出 8,返回后存进 ans。

定义里的 a、b 叫形参,调用时的 3、5 叫实参,按顺序对应。

参数可以没有,也可以有多个,个数、顺序和类型要对应好。

返回值,不是屏幕输出。

return 8; 把值交给调用处,cout << 8; 才是输出到屏幕。

只调用 f(3, 5);,但不接收、不输出它的结果,不会自动显示 8。

return,结束当前函数

执行到 return,当前这次函数调用就结束了。

int f(int x) {
    if (x < 0) return -1;

    return x * 2;
}

这里先处理小范围整数,保证乘 2 的结果能放进 int。

返回值类型不是 void,就要注意各个分支有没有返回结果。

main 末尾的 return 0; 表示程序正常结束,不是让程序输出 0。

无返回值的函数

返回值类型写 void,表示不返回一个结果值。

void f() {
    cout << 123;
}
f(); // 调用后输出123

需要提前结束这个函数,可以写 return;,不能写 return 123;。

常见错误

调用函数,别漏掉括号。

f;       // 没有调用函数
f(3, 5); // 调用函数

参数的个数、顺序、类型要对应。 这里的 f 需要两个整数。

f(3);    // 错误:少一个参数
f(3, 5); // 正确

cout 是输出,return 才是返回结果。

int f(int a, int b) {
    cout << a + b; // 只输出,没有返回结果
}

这里应改成 return a + b;,再由调用处决定是否输出。

普通函数的定义,写在 main 外面。 初学时,先写在 main 前面。

int main() {
    int f(int a, int b) { // 错误:函数定义写进了main
        return a + b;
    }

    return 0;
}