您的位置:首页 > 其它

编写函数实现对两个变量的值进行交换

2018-04-07 17:25 204 查看
子函数的改变要想修改父函数的值,必须要:
1、传指针 2、解引用
#include <stdio.h>
void Swap_eer1(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
该函数采用值传递方式,是单向传递,实参变量和形参变量分别占用不同的存储单元,改变形参变量的值不会影响实参变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err2(int *p1,int *p2)//有传指针,但是没有解引用
{
int *tmp=p1;
p1=p2;
p2=tmp;
}
该函数采用指针传递方式,在该函数中交换的是两个指针形参变量的值,而不是两个指针形参变量所指向的存储单元的值,因此不能影响父函数中变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
该函数采用指针传递方式,是双向传递。理论上能实现两个变量值的交换,但是该函数中应用了指针变量tmp所指向的存储单元作为中间变量,未对指针变量tmp进行初始化,tmp为野指针,它的值为随机值。若tmp指向系统区,改变tmp所指向存储单元的值,有可能造成系统混乱。因此,此函数的设计不可取。
#include <stdio.h>
void Swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
/*该函数采用指针传递方式,是双向传递,通过改变形参指针变量所指向的存储单元(即父函数中的变量)的值,从而影响父函数中变量的值,故该函数能实现了两个变量值的交换*/
int main()//调用函数,父函数
{
int a=10;
int b=20;
Swap(&a,&b);//被调用函数,子函数
printf("a=%d,b=%d\n",a,b);
return 0;
}
调试结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐