您的位置:首页 > 编程语言 > C语言/C++

指针的应用(c语言)——(子函数实现交换父函数中变量的值)

2018-04-08 14:19 567 查看

 子函数实现交换父函数中变量的值

int main()

{
int a=10;
int b=20;
Swap(a,b);//若实现a,b值交换,Swap()函数该怎么写?
printf("%d %d\n",a,b);
return 0;
}

子函数——被调用函数(Swap());父函数——调用函数(main());

这里是交换a,b 值的三种方法,你认为哪个正确呢?void Swap1(int a,int b)

{
int tmp= a;
a=b;
b=a;
}
void Swap2(int *p1,int *p2)
{
int *tmp=p1;
p1=p2;
p2=tmp;
}
void Swap3(int *p1,int *p2)
{
int *tmp;
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}

我们都运行一遍:
Swap1 ,Swap2运行结果都没用达到预期:   


Swap3运行中断  


这是为什么呢?接下来,我们来逐个分析:
Swap1(error):void Swap_error1(int a,int b)//只是交换参数列表中的a,b的值
{
int tmp= a;
a=b;
b=a;
}
Swap2(error):void Swap_error2(int *p1,int *p2)//a,b值未发生交换,只是交换了p1,p2指针的指向
{
int *tmp=p1;
p1=p2;
p2=tmp;
}
Swap3(error):void Swap_error3(int *p1,int *p2)//指针运用错误
{
int *tmp; //野指针,悬挂指针
*tmp = *p1;//tmp为野指针,解引用会导致程序崩溃
*p1 = *p2;
*p2 = *tmp;
}
怎么来写Swap()函数呢?
    要想改变父函数变量的值,就要在子函数中找到父函数的变量。而参数列表只是简单地拷贝实参,所以子函数得到的a,b是“假的,复制品”,只就是Swap1()没达到预期的原因。
   怎么找父函数的变量呢?当然要想到指针了,将父函数a,b的地址传递给参数列表,这样子函数就找到父函数的变量了。void Swap(int *p1,int *p2)//得到a,b地址,交换a,b的值
{
int tmp=* p1;
*p1=*p2;
*p2=tmp;
}


学会了吗?再来试一道题吧!int main()

{
int a = 10;
int *p = &a;
p = NULL;
Fun(p);//怎么实现把p改为空指针?
printf("%d\n",*p);
return 0;
}
此处为什么会崩溃?怎么实现子函数“崩溃”?
“崩溃”:此时p=NULL;无法解引用;
子函数实现“p=NULL;”:viod Fun(int* *p)
{
*p=NULL;//修改父函数*p的
}
int main()
{
int a = 10;
int *p = &a;
//p = NULL;
Fun(&p);
printf("%d\n",*p);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐