跳转到内容

C++ 函数调用

来自代码酷
Admin留言 | 贡献2025年4月28日 (一) 21:26的版本 (Page creation by admin bot)

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)

C++函数调用是程序执行过程中调用已定义函数的过程,通过传递参数、执行函数体并返回结果来实现代码复用和模块化设计。本文将从基础语法到高级应用全面解析该机制。

基本概念[编辑 | 编辑源代码]

函数调用包含以下核心步骤:

  1. 控制权转移到被调函数
  2. 参数传递(值传递、引用传递等)
  3. 函数体执行
  4. 返回值传递(若存在)
  5. 控制权返回调用点

数学表达:若函数定义为 f(x),则调用过程可表示为 y=f(a),其中 a 为实参。

调用方式[编辑 | 编辑源代码]

普通函数调用[编辑 | 编辑源代码]

  
#include <iostream>  
using namespace std;  

// 函数定义  
int add(int a, int b) {  
    return a + b;  
}  

int main() {  
    // 函数调用  
    int result = add(3, 5);  
    cout << "Result: " << result << endl; // 输出: Result: 8  
    return 0;  
}

嵌套调用[编辑 | 编辑源代码]

函数调用可作为其他函数的参数:

  
cout << "Sum: " << add(add(2,3), 4); // 输出: Sum: 9

参数传递机制[编辑 | 编辑源代码]

参数传递方式对比
类型 语法 特点 示例
值传递 func(int x) 创建副本 swap(a,b) 不影响原值
引用传递 func(int &x) 操作原始变量 可修改实参
指针传递 func(int *x) 通过地址访问 需处理指针解引用

调用栈分析[编辑 | 编辑源代码]

sequenceDiagram participant Main as main() participant Func as add() Main->>Func: 调用 add(3,5) Note right of Func: 栈帧创建 Func-->>Main: 返回 8 Note left of Main: 栈帧销毁

高级应用[编辑 | 编辑源代码]

函数指针调用[编辑 | 编辑源代码]

  
int (*operation)(int, int) = add;  
cout << operation(10,20); // 输出: 30

Lambda表达式调用[编辑 | 编辑源代码]

  
auto greet = [](string name) {  
    cout << "Hello, " << name << "!";  
};  
greet("Alice"); // 输出: Hello, Alice!

实际案例[编辑 | 编辑源代码]

场景:温度转换工具

  
float celsiusToFahrenheit(float celsius) {  
    return celsius * 9/5 + 32;  
}  

int main() {  
    float temp;  
    cout << "输入摄氏温度: ";  
    cin >> temp;  
    cout << "华氏温度: " << celsiusToFahrenheit(temp);  
}

常见问题[编辑 | 编辑源代码]

  • 递归调用深度过大:可能导致栈溢出
  • 参数顺序错误:如 pow(2,3)pow(3,2) 结果不同
  • 未处理返回值:忽略返回值可能导致逻辑错误

性能考虑[编辑 | 编辑源代码]

  • 内联函数(inline)减少调用开销
  • 避免过度嵌套调用以降低栈压力
  • 引用传递大对象避免复制成本