c++函数
C++ 函数最全详解:从基础语法到高阶用法(新手必看)
函数是 C++ 程序的核心单元,是代码复用、逻辑拆分、项目结构化的基础。几乎所有 C++ 程序逻辑都由函数构成。
本文带你从零吃透 C++ 函数:基础语法、形参实参、返回值、函数声明与定义、函数重载、默认参数、内联函数、匿名 lambda 函数,附带可运行代码示例,适合收藏当手册。
一、什么是函数?
函数是一组完成特定功能的代码块,可以被重复调用。
使用函数的好处:
-
代码复用:写一次,多处调用
-
逻辑清晰:功能拆分,各司其职
-
易于维护:修改函数即可全局生效
-
降低冗余:避免大量重复代码
二、C++ 函数标准语法
1. 完整结构
返回值类型 函数名(参数列表) {
// 函数体:具体逻辑
return 返回值;
}
2. 各部分解释
-
返回值类型:函数执行完返回的数据类型(int、double、void 等)
-
函数名:自定义名称,遵循标识符规则,见名知意
-
参数列表:外界传入函数的变量,可选
-
函数体:实现功能的代码
-
return:终止函数并返回数据
三、基础函数示例(入门必学)
1. 无参无返回值函数(void)
只执行逻辑,不返回任何结果。
#include <iostream>
using namespace std;
// 无参无返回值
void printHello() {
cout << "Hello C++ 函数!" << endl;
}
int main() {
printHello(); // 调用函数
return 0;
}
2. 有参有返回值函数
接收参数、计算结果并返回,最常用。
// 两数相加
int add(int a, int b) {
return a + b;
}
int main() {
int res = add(10, 20);
cout << "结果:" << res << endl;
return 0;
}
四、形参 和 实参 的区别
-
形参(形式参数):函数定义括号里的变量,只占位,不分配实际内存
-
实参(实际参数):调用函数时传入的真实数据、变量、常量
// a、b 是形参
int sub(int a, int b) {
return a - b;
}
int main() {
sub(100, 50); // 100、50 是实参
return 0;
}
五、值传递、地址传递、引用传递(重点)
C++ 三种参数传递方式,面试高频考点。
1. 值传递(默认)
传递的是变量副本,函数内修改不会影响原变量。
void change(int x) {
x = 999;
}
int main() {
int a = 10;
change(a);
cout << a; // 仍然是 10
return 0;
}
2. 地址传递(指针参数)
传递变量地址,可以修改原数据。
void change(int *x) {
*x = 999;
}
int main() {
int a = 10;
change(&a);
cout << a; // 999
return 0;
}
3. 引用传递(C++ 推荐)
简洁高效,无指针语法、可直接修改原变量,工程最常用。
void change(int &x) {
x = 999;
}
int main() {
int a = 10;
change(a);
cout << a; // 999
return 0;
}
六、函数声明与分离定义
大型项目中,函数一般先声明、后定义,解决“调用在前,定义在后”报错问题。
#include <iostream>
using namespace std;
// 函数声明
int maxNum(int a, int b);
int main() {
cout << maxNum(3, 9);
return 0;
}
// 函数定义
int maxNum(int a, int b) {
return a > b ? a : b;
}
本质:声明告诉编译器函数长什么样,定义提供具体实现。
七、C++ 默认参数
可以给参数设置默认值,不传参则使用默认值。
void showInfo(string name = "未知用户") {
cout << "用户名:" << name << endl;
}
int main() {
showInfo(); // 使用默认值
showInfo("张三"); // 传入自定义值
return 0;
}
规则:带默认值的参数必须放在参数列表右侧。
八、函数重载(C++ 核心特性)
同名不同参:函数名相同,参数个数/类型/顺序不同,构成重载。
注意:返回值不同不构成重载。
#include <iostream>
using namespace std;
void print(int a) {
cout << "整数:" << a << endl;
}
void print(double a) {
cout << "小数:" << a << endl;
}
void print(int a, int b) {
cout << "两个整数:" << a << "," << b << endl;
}
int main() {
print(10);
print(3.14);
print(1, 2);
return 0;
}
九、内联函数 inline(优化小函数)
普通函数调用有开销,频繁调用的短小函数建议用 inline。
编译器会将函数代码直接嵌入调用处,减少调用开销。
inline int square(int x) {
return x * x;
}
int main() {
cout << square(5);
return 0;
}
适用场景:代码行数少、逻辑简单、频繁调用。
十、C++ 匿名函数 Lambda(高阶常用)
C++11 及以上支持,无需定义函数名,临时定义、当场使用,非常适合算法、STL 遍历。
语法:
[捕获列表](参数列表) mutable -> 返回值类型 { 函数体 }
简单示例
#include <iostream>
using namespace std;
int main() {
auto add = [](int a, int b) {
return a + b;
};
cout << add(20, 30) << endl;
return 0;
}
十一、新手常见易错点总结
-
void 函数不能 return 数值,只能单独 return;
-
有返回值的函数必须保证所有分支都有 return
-
默认参数只能放在参数列表后面
-
仅返回值不同不构成函数重载
-
大型项目必须区分函数声明与定义,方便多文件协作
十二、总结
1. 函数是 C++ 代码复用和模块化的基础;
2. 三种传参方式:值传递、指针传递、引用传递(优先引用);
3. 掌握声明与定义分离、默认参数、函数重载是进阶关键;
4. inline 优化小函数,lambda 适配临时逻辑与算法场景。
后续我会继续更新 C++ 递归函数、函数指针、回调函数、类成员函数等进阶内容,欢迎关注收藏!
浙公网安备 33010602011771号