本文介绍C语言中函数传值传参、传址传参和引用传参的区别与使用情景,附C语言代码例子方便理解。
阅读本文需要了解函数调用时,何种参数在函数调用结束后会被释放,若不了解,可先观看文章:C语言中局部变量、全局变量和静态变量的生命周期
一、传值传递
1、概念
传值传递:把参数的实际值复制给函数的形式参数。
在这种情况下,修改函数内的形式参数不会影响实际参数,即在函数内对形参进行操作时,不会对函数外的参数造成影响。
2、例子
请尝试写出下列代码的运行结果:
#include <stdio.h>
//edit at 2023.4.07
int add(int x,int y);
int main(){
int a=1;
int b=1;
int c=add(a,b);
printf("%d + %d = %d",a,b,c);
return 0;
}
int add(int x,int y){
//传值传递_改变形参x,y的值,实参a,b是否会被改变?
x=2;
y=3;
int z=x+y;
return z;
}
该代码的运行结果为:
1+1=5
我们理想中的运行结果应为:2+3=5。但我们改变了x与y的值,a和b的值并没有受到影响。这正是由于,我们在传参时使用的是传值传递方式。而传值传递在传递时只是进行了复制操作,所以x与a、y与b之间除了值相同,没有任何的联系。
//将a的值复制给x,将b的值复制给y
int c=(a,b);
int add(int x,int y);
3、应用场景
从上面的例子我们可以很简单的看出,传值传递方式不适合用于需要改变参数值的场景中。它仅仅适合用于只对参数进行操作,不对参数的值进行改变的场景。
例如简单的相加函数、简单的输出函数等,举例如下:
//add x,y
int add(int x,int y){
int z=x+y;
return z;
}
//print arr
void printf(int a,int b){
printf("%d\n",a);
printf("----------");
printf("%d\n",b);
}