函数的调用
传值调用:
函数的形参和实参分别占有了不同的内存块,而对于实参的修改,不会影响到实参。只是赋予了它值,但实际上输出的还是它本身。
下面我们来写一个交换函数,执行后,a,b互换位置
先写一个主函数
#include <stdio.h>
//在这里定义Swap1函数 因为不需要返回值所以我们使用void来创建函数
void Swap1(int x,int y) //接收传进来的参数
{
int t=0; //一个临时空间用来作中间值
t = x;
x = y;
y = t;
}
int main()
{
int a =20;
int b =10;
printf("交换前a和b的值为 a=%d b=%d",a,b);
//在这里调用交换函数
Swap1(a,b);//传递两个实参 a,b
printf("此时a和b的值为 a = %d b=%d",a,b);
return 0;
}
我们可以发现a和b的值并没有产生交换,这是由于这个x y是另开辟的空间,只是把a,b的值复制给了x y,这就导致了主函数里的a,b的值并未发送改变
传址调用
传址调用就是为了解决我们的麻烦的。它把函数外部创建的变量内存地址,传递给函数参数。这种方式可以使得外部和内部真的建立联系。修改外部改变内部。
void Swap2(int*pa,int*pb) //接收传递过来的指针变量 ------可以反过来找到外部的a和b
{
int t = 0; //中间值
t = *pa;
*pa = *pb;
*pb = t;
}
int main()
{
int a =20;
int b =10;
printf("交换前a和b的值为 a=%d b=%d",a,b);
//在这里调用交换函数
Swap2(&a,&b);//调用函数 传递的是a和b的内存地址
printf("此时a和b的值为 a = %d b=%d",a,b);
return 0;
}
同时我们发现 值已经完成了交换