具体代码展示如下:
源代码如下:
//指针与函数之函数调用中的值传递与地值传递区别
#include<stdio.h>
void main()
{
void swap1(int pa,int pb);
void swap2(int *pa,int *pb);
void swap3(int *pa,int *pb);
int ia,ib;
ia=5;ib=6;
swap1(ia,ib);
printf("\n调用swap1函数后的值为%3d %3d 交换失败! \n\n",ia,ib);//值传递,交换失败
swap2(&ia,&ib);
printf("调用swap2函数后的值为%3d %3d 交换失败! \n\n",ia,ib);//交换失败
swap3(&ia,&ib);//注意因为是指针的传递,所以要加取址符号
printf("调用swap3函数后的值为%3d %3d 交换成功!!\n\n",ia,ib); //交换成功
}
void swap1(int pa,int pb)
{
int temp;
temp=pa;
pa=pb;
pb=temp;
}
//值传递进行函数调用实现交换,虽然形参中实现了交换,但是函数调用完之后释放形参,实参并未发生改变,未能成功交换
void swap2(int *pa,int *pb)
{
int *temp;
temp=pa;
pa=pb;
pb=temp;
}
//地址传递但是swap2函数修改的只是形参中的指针方向,函数调用完之后释放,方向又变为原来的方向,未能成功交换
void swap3(int *pa,int *pb)
{
int temp;
temp=*pa;
*pa=*pb;
*pb=temp;
}
//传参时候传递的是地址,将地址中的值改变,释放的时候地址中的值已经改变,所以实现了交换
/*
可以这么理解: swap1只是形参的值发生改变但是因为释放形参后,实参中的值并没有改变
swap2虽是将地址传给函数,但是在调用函数中又使用了指针来接受传过来的地址,虽然在调用函数中实现了指针指向的改变,
使数值发生了改变,但是在回调的时候,指针释放,原来的地址中的数字没有发生改变。
swap3是将地址传给函数,在调用函数中只需将地址中的数值改变,会调后地址中的值已经发生了改变;
*/