手机浏览器扫描二维码访问
而我刚刚提出的要求是要交换两个是实际参数的变量,所以我们应该监控a和b在调用函数的前后的变化。
」
明白了老爹的意图后,我对代码进行了更改,然后重新编译、运行。
「what!
」
看到小黑屏上打印的结果后,我没有忍住喊了出来。
因为屏幕上打印的结果显示,a和b在调用swap函数前后居然没有任何变化!
我简直不敢相信自己的眼睛,这就好比你用计算器计算11的值,它妹的居然给你显示11=3!
为了委托期间,我重启了电脑又执行了几次,但是结果都是一样的!
换句话说,swap函数交换a和b的值失败了,但是函数分明已经是执行了的!
「老爹,这是怎么回事儿啊?」
我实在是想不通这其中的症结所在,只能够向老爹提问。
「这就要从函数参数的传递问题开始说起了。
在c语言中,我们在调用函数的时候,参数的传递实际上是采用的值的传递方式,什么意思呢?
就拿我们刚刚举那个例子来说,当我们在调用swap(a,b)的时候,实际上是把a的值3复制了一份给变量x,而不是a这个变量换了一个名字,变成了x。
同理,变量b的值4复制了一份给y。
而x和y跟a和b没有任何关系,所以在函数中无论我们对x和y做什么操作,都不会影响到a和b,所以对a和b进行值交换没有成功。
」
「原来如此!
那用指针为什么就能达到这个效果呢?」
我点了点头,然后抛出了自己的疑问。
「诶,我什么时候说了用指针可以实现这个功能?」
「虽然任叔叔你没有明说,但是你特地挖了一个坑让我和玥玥往里面跳,肯定是别有目的的。
既然现在咱们正好在学习指针,再加上刚刚我和玥玥都对指针的强大表示怀疑,你自然是要想办法来说服我们呀!
」
我还没有开口,小弦子倒是按捺不住了。
「你们两个……」
见自己的心思被我们看穿,老爹有些无语。
「好吧,那我先给你们演示用指针怎么来实现刚刚的功能:
swap(int*x,int*y)