当前位置:   article > 正文

C语言基础知识点之用指针进行数据交换_指针交换

指针交换

1.在我们还没有接触到指针的时候,如果出现一个题目上我们用自定义函数来进行两数据的交换,相信大家会在很短的时间之内写出如下代码
在这里插入图片描述
然后快速运行(心里想着这不就齐活了),然后运行结果却让人失望了,因为结果是这样的
在这里插入图片描述
有的小伙伴就会问了,我的自定义函数明明实现了交换数据的功能啊,怎么会这样呢,别急,我们在自定义函数中加入一句测试代码来看看到底发生了什么在这里插入图片描述
在自定义函数中加入了打印a,b的语句后我们发现,自定义函数确实对传入的参数进行了交换,但是在主函数中却没有交换,这是为什么呢?再耐心一下,我们再将数据地址的打印语句加入到主函数与自定义函数中,看看会有什么收获 在这里插入图片描述
终于,我们发现这两者的地址居然不同,因此我们得出结论:计算机会把你传入的a和b与主函数中的a和b当做两组毫不相干的数据进行处理,相当于函数调用的时候只是把实际参数的数值传了进去,并在自定义函数中重新建立了两个全新的变量(新的地址),并且对这两个新的数据进行了交换,在返回主调函数的时候返回的却是之前的主函数中旧的数据,这种传递只传递了值对主函数中的两个变量来讲并没有发生任何改变。
2.实际上,对于C语言来说,每个c函数都有自己的变量(尽管他们的名称相同)但是他们具有不同的地址,这样做可以防止原始变量被被调函数中的副作用意外修改。
3.从上面的例程我们可以看出,要进行数据的交换,简单的传值是不行的,那么我们就得从变量的地址入手了,在主函数中将变量的地址进行传入 ,对地址所指向的数据进行交换,那么不就实现了利用自定义函数进行数据的交换了吗?那么怎么进行这一系列的操作呢,答案就是指针。利用取址符我们可以将变量的地址进行传入,利用指针进行地址上的数据交换;由于传入的参数为地址,因此在形式参数的设计上我们也要采取指针的形式。
在这里插入图片描述
总结:如果要在被调函数中改变主调函数的变量,则要进行地址传值,如果只是单纯的计算或打印等简单操作则可以进行直接的数值传递。后续的数据结构课程中,对抽象数据类型进行一些操作就会交替使用到这两种传值方法。
注:本文的参考书籍为c premer plus(第六版)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/思考机器2/article/detail/63018
推荐阅读
相关标签
  

闽ICP备14008679号