子函数如何修改父函数

在我们以前的学习中,总是习惯在子函数(被调用函数)中打印结果,今天我们来说说这样做的弊端以及如何优化,以交换函数为例

void Swap(inta,int b)

{

                                          inttem;

                                          tem=a;

                                          a=b;

                                          b=tem;

                                          printf("%d\n%d\n",a,b);

}

 

int main()

{                                         inta=3;

                                          intb=4;

                                          Swap(a,b);

                                          return0;

}

以前总习惯这样写,似乎程序运行出来说也是正确的。但是在主函数中打印结果只能证明子函数中两个数字交换成功了,但是父函数中(主函数)中的两个数字是否交换成功了呢?

我们不妨将打印函数放到主函数中,然后运行验证一下。即:

int main()

{                                         inta=3;

                                          intb=4;

                                          Swap(a,b);

                                          printf("%d%d\n",a,b);

                                          return0;

}

运行之后我们会发现,两个数字没有任何变化,并没有进行交换,也就是说子函数的交换函数并没有作用到主函数。那这时我们该如何修改?指针可以修改变量的值,是不是通过指针可以让子函数可以对父函数是实现修改呢?

这时有一个知识点有一定的参考作用:

父函数调用子函数,子函数能修改父函数中内容的前提是:

1、传指针

2、解引用

 

如图所示,我们必须在主函数中将a、b的地址作为形参传输过去,再在子函数中对指针变量进行交换,最后进行解引用即可。

具体实现过程如下:

void Swap(int*a,int *b)

{

                                                   inttem;

                                                   tem=*a;

                                                   *a=*b;

                                                   *b=tem;

}

 

int main()

{                                                  inta=3;

                                                   intb=4;

                                                   Swap(&a,&b);

                                                   printf("%d%d\n",a,b);

                                                   return0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值