使用子函数进行两个变量交换遇到的问题

根据上图代码进行编译和执行时发现a和b并没有进行交换,这是为什么?

仔细阅读发现代码本身没有错,是可以编译的,但是却忽略了一个细节:

此代码中的子函数是无返回值的,也就是说,父函数把a和b的值拷贝一份发给了这个子函数,但是子函数只会对它进行内部处理,然后释放,接着父函数中a和b还是原来的值。

那么如何才能用封装函数的方法实现a和b中值得交换?

答案是用指针,如下图代码所示

 我们定义一个子函数,它的参数是俩指针变量,接着定义一个中间变量temp,把参数1(指针x)所指向的内容给temp,参数2(指针y)指向的内容给参数1(指针x)的内容,最后把temp赋给y的内容,经过主函数调用之后发现a和b进行了交换,这是为什么?

因为子函数和父函数在内存中占用着不同的空间,本来就互不影响,所以第一个代码在没有返回值的情况下不会对父函数产生影响,但是第二个代码中子函数的两个参数是指向父函数中a、b的指针,那么这就直接跟父函数建立了一座桥梁,当我对这两指针取*操作时那操作的就直接是父函数中a、b的值,子函数完成后即使释放掉,那释放的也是存储了a、b地址的变量,a、b变量内的值已经修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值