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++ 递归函数、函数指针、回调函数、类成员函数等进阶内容,欢迎关注收藏!

posted @ 2026-08-06 12:57  *抽象系数天花板*  阅读(1)  评论(0)    收藏  举报