函数的传参类型:
值传参
地址传参
1.值传递
#include <stdio.h>
#include <stdlib.h>
int printf_value(int a,int b)
{
printf("%d,%d\n",a,b);
return 0;
}
int main()
{
int i = 3,j=5;
printf_value(i,j);
return 0;
}
值传参方法比较简单,使用形式参数的方法传入参数,有c语言基础的基本都不难理解,但是它也存在缺点,我们直接举个例子:
#include <stdio.h>
#include <stdlib.h>
void swap(int i,int j)
{
int temp;
temp=i;
i=j;
j=temp;
}
int main()
{
int i = 3,j=5;
int temp;
swap(3,5);
printf("i=%d,j=%d\n",i,j);
return 0;
}
上面代码意图是使用swap()函数交换i和j的值,使用的是值传参的方法。但是编译的结果是:
i=3,j=5
代码并没交换两个值!
原因是在执行swap()函数时,交换的是swap()的形式参数,(函数在结束调用时形式参数就被销魂了)对main()而言,i和j的值根本就没有发生变化!
2.地址传递
对于上述的问题,我们可以使用指针传递参数,即地址传参。方法如下:
#include <stdio.h>
#include <stdlib.h>
void swap(int *i,int *j)
{
int temp;
temp=*i;
*i=*j;
*j=temp;
}
int main()
{
int i = 3,j=5;
int temp;
swap(&i,&j);
printf("i=%d,j=%d\n",i,j);
return 0;
}
输出结果:i=5,j=3
3.总结:
地址传参和值传参是常用的传参方式,但是两者也存在区别。使用值传参,函数会开辟一个新的空间给形参,实参传入给形参的值,会传入到新的空间储存,不会影响实参的值。如果使用地址传参,其实传递进来的是实参的地址,并不会开辟新的储存空间,会直接作用得到原来的实参中,从而改变实参的值。