在C语言中,函数参数传递主要有两种方式:值传递(Pass by Value)和指针传递(Pass by Reference,尽管在C中并不直接称为"Pass by Reference",但指针的使用在效果上类似)。这两种方式在处理函数参数时有明显的不同。
值传递(Pass by Value)
在值传递中,函数参数是通过值的副本进行传递的。也就是说,当你传递一个参数给函数时,C语言会在栈上为这个参数创建一个副本,并将这个副本传递给函数。函数内部对参数所做的任何修改都不会影响到原始数据,因为它操作的是参数的副本。
例如:
#include <stdio.h>
void modifyValue(int x) {
x = 10; // 修改的是参数的副本
}
int main() {
int num = 5;
modifyValue(num);
printf("%d\n", num); // 输出5,而不是10
return 0;
}
在这个例子中,modifyValue
函数接收一个整数x
的副本,并将其修改为10。但是,这个修改对main
函数中的num
变量没有影响,因为x
只是num
的一个副本。
指针传递(通过指针传递值)
在C语言中,虽然没有直接的"Pass by Reference"机制,但你可以使用指针来达到类似的效果。当你通过指针传递一个参数给函数时,你实际上传递的是这个参数在内存中的地址。函数内部可以通过这个地址来访问和修改原始数据。
例如:
#include <stdio.h>
void modifyPointer(int *ptr) {
*ptr = 10; // 修改的是指针指向的原始数据