C语言中的值传参和引用传参是指什么?

2024-12-19 09:57:33
推荐回答(2个)
回答1:

在C语言中其实没有引用传参,都是值传参。即传递的都是实参的副本。
如下示例,
//交换两个参数的值,值传参
void swap(int x, int y)
{
int temp = x;
x = y;
y = temp;
}

int a = 2, b =1;
swap(a,b); //a,b的值不会改变,因为改变的是实参a,b的副本。
另一个示例:
//所谓的“引用传参”,交换两个数值
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = tem;
}

int a =2, b = 1;
swap(&a, &b);//a,b的值改变
其实这里引用传参,传递的也是参数的副本,只是这个副本是变量a,b的地址,所以你在函数swap中你并不能通过参数改变变量a,b的地址,因为它只是一个副本,是值传递。但你得到变量的地址,你就可以访问和改变变量的内容,所以在第二个swap函数中,你可以通过*x和*y来改变实参的值,从而可以达到交换变量a,b值的效果。但这并不是引用传递。只是有这样的说法。推荐你去秒秒学上看看相关的内容,我也是从那上面学来的。

回答2:

  1. 值传递:函数内改变其值,退出函数后值不变

  2. 引用传递:函数内改变其值,退出函数后变量值和函数的更改后值一样


代码:

变量  a = M;
调用函数A(a);//A函数内部代码为:a =N;
输出 a;


结果:

值传递:M

引用传递:N