📅  最后修改于: 2023-12-03 15:00:11.384000             🧑  作者: Mango
在C中,有两种方式可以将参数传递给函数,即按值调用和按引用调用。这两者的主要区别在于参数在传递过程中是如何被复制或引用的。
按值调用是指将参数作为值传递给函数。在函数内部,这些参数的值被复制到函数的局部变量中,并在函数执行完毕后被销毁。按值调用传递的是参数的副本而不是参数本身,因此对函数内所做的修改不会影响到函数外的值。
以下是一个按值调用的例子:
#include <stdio.h>
void add(int x, int y)
{
x = x + y;
}
int main()
{
int a = 10, b = 20;
add(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出结果为:
a = 10, b = 20
按引用调用是指将参数作为指针传递给函数。在函数内部,这些参数的地址被复制到函数的形参中,函数内部使用指针操作外部变量的值。按引用调用可以改变指针所指向的值,从而影响到函数外的值。
以下是一个按引用调用的例子:
#include <stdio.h>
void add(int *x, int *y)
{
*x = *x + *y;
}
int main()
{
int a = 10, b = 20;
add(&a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出结果为:
a = 30, b = 20
在这个例子中,a和b的地址被传递给了add函数。函数内使用指针操作外部变量的值,并改变了a的值。
按值调用传递的是参数的副本,是一种安全而高效的方式。按引用调用可以改变指针所指向的值,但需要确保代码正确性,特别是指针为空或指向未初始化的内存时,需要加入有效性检查来保证程序的正确性。在C中,按值传递和按引用传递根据实际的使用场景来选择,而不是一味的选择其中一种方式。