基本概念
核心目的:避免重复造轮子,拒绝“复制粘贴”。
- 代码复用:同样的功能(比如求两数最大值),不需要反复写相同的代码。
- 模块化:将大问题拆解成小任务(像乐高积木一样)。
- 易维护:如果需要修改某个功能,只需要改函数内部,其他地方调用它的不用动。
基本结构:五要素
返回值类型 函数名(参数1类型 参数1名, 参数2类型 参数2名) {
// 函数体:具体执行的代码
return 返回值; // 如果返回值类型是 void,这行可以省略
}
案例对比:无函数 vs 有函数
| 需求 | 没有函数(直接在 main 里写) | 有函数(封装逻辑) |
|---|---|---|
| 求两个数的和 | int a=3, b=5;int s = a+b;cout << s; | int add(int x, int y){ return x+y;}// 调用cout << add(3,5); |
| 优点分析 | 虽然简单,但如果要求 100 次和,代码会很冗长 | 一次编写,随处调用 |
实际操作流程
以求三个整数的最大值为例。
- 确定函数签名:
- 返回值:最大值是数字(整数),所以需要用
int表示返回值类型 - 名字:见名知意,叫
max3 - 参数:三个整数,所以是
int a,int b,int c
- 返回值:最大值是数字(整数),所以需要用
- 编写函数体:
int max3(int a, int b, int c) {
if (a >= b && a >= c) {
return a;
}
else {
if (c > b) return c;
else return b;
}
}
- 在main函数中调用
#include <iostream>
using namespace std;
// 注意:函数通常写在 main 函数之前(或者先声明)
int max3(int a, int b, int c) {
if (a >= b && a >= c) {
return a;
}
else {
if (c > b) return c;
else return b;
}
}
int main() {
int x = 10, y = 20, z = 25;
// 调用函数,将 x 传给 a,y 传给 b,z 传给 c
int result = max3(x, y, z);
cout << "最大值是:" << result << endl; // 输出 25
return 0;
}
形参与实参
- 形式参数:定义函数时
(int a, int b, int c)中的a、b和c。- 它们在函数没被调用时,不占用内存,也没有具体的值。
- 实际参数:调用函数时
max3(x, y, z)中的x、y和z。- 它们是 main 函数里真实存在的变量。
无返回类型:void
只做事情,不需要返回结果的函数,用void类型
// 打印10个星号,不需要返回任何数
void printStars() {
for(int i = 0; i < 10; i++) {
cout << "*";
}
// 这里没有 return 语句(或者可以写 return;)
}
int main() {
printStars(); // 直接调用,不能赋值给变量
return 0;
}
驼峰命名法
核心规则:多个单词组成一个名称时,第一个单词首字母小写,后续每个单词首字母大写。因为大写字母像驼峰,所以得名。
如:变量作用是学生名字,则通过student和name命名,根据驼峰命名法的规则,s小写,n大写,最终结果是studentName。