1. 理解函数参数传递的本质
在C和C++编程中,函数参数的传递方式是每个开发者必须掌握的基础概念。很多人刚开始学习时容易混淆"实参"和"形参"的区别,更不用说理解引用参数的特殊性了。我在实际开发中见过不少由于参数传递理解不到位导致的bug,有些甚至引发了严重的内存问题。
实参(actual parameter)是调用函数时实际传入的值或变量,而形参(formal parameter)是函数定义中声明的接收变量。在C语言中,所有参数传递本质上都是值传递(pass by value),即实参的值会被复制给形参。而在C++中,除了值传递外,还引入了引用传递(pass by reference)的方式,这使得参数传递的行为变得更加复杂但也更加强大。
关键区别:C语言只有值传递,C++同时支持值传递和引用传递。理解这个根本差异是掌握参数传递的关键。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. C语言中的值传递机制
2.1 基本数据类型传递
在C语言中,当我们将一个变量作为参数传递给函数时,实际上传递的是这个变量的副本。让我们看一个简单的例子:
c复制#include <stdio.h>
void modifyValue(int x) {
x = x * 2;
printf("Inside function: %d\n", x);
}
int main() {
int num = 5;
modifyValue(num);
printf("Outside function: %d\n", num);
return 0;
}
输出结果会是:
code复制Inside function: 10
Outside function: 5
这个例子清晰地展示了值传递的特性:函数内部对形参x的修改不会影响外部的实参num。因为x只是num的一个副本,它们在内存中是两个独立的变量。
2.2 指针作为参数的传递
虽然C语言只有值传递,但我们可以通过指针来模拟引用行为。指针本身也是通过值传递的,但由于它存储的是内存地址,我们可以通过解引用来修改原始数据:
c复制#include <stdio.h>
void modifyValue(int *x) {
*x = *x * 2;
printf
