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