c语言中关于函数的值传递,地值传递的区别


具体代码展示如下:



源代码如下:

//指针与函数之函数调用中的值传递与地值传递区别 

#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是将地址传给函数,在调用函数中只需将地址中的数值改变,会调后地址中的值已经发生了改变; 

*/ 



智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告