由上面的例子引出我对引用,指针传递的重新思考。
参考下面博文,醍醐灌顶
http://www.cnblogs.com/yanlingyin/archive/2011/12/07/2278961.html
指针传递其实也是值传递,只不过传递的是变量的地址,如果在形参中改变了指针,那么接下来在子函数的操作对实参是不会影响的。
而引用只需记住,引用就是实参变量的别名,对引用变量的操作就是对实参的操作。
2019.3.11更新
关于博客中提到的关于指针传递的理解应该是比较深刻的,最近在复习指针的指针的时候又重新加深了关于函数传参与指针的使用的理解。
- 如果想在某函数中改变某变量的值,两种方法:1)传递该变量的引用给函数;2)传递该变量的地址(指针)给函数。经典的例子调换两个数值就是使用的指针操作。其中传递变量的地址,这儿传到调用函数其实也是传的地址的拷贝,也就是说在调用函数中可以修改指针指向的内存的值但是不能修改指针的指向。
- 如果想要在函数中修改指针的指向,例如数组指针后移操作,如何在函数调用完也实际影响到实参的指向呢?这儿也可以两种方式:1)传递指针的引用(可参考博客上面的例子)2)指针的指针。关于指针的指针用法一开始学起来真有点头疼,细细想来,有几个点记住也就能较好理解指针的指针的用法。第一点:指针就是某块内存的地址;第二点:函数传参永远传的都是实参的拷贝,函数中对形参的该表并不会改变实参。好了,下面以一个例子来理解指针的指针用法。
上面的例子展示了指针的传递,指针引用的传递,指针的指针的传递的用法。这儿主要再强调下指针的指针的用法。
在fun2中我们尝试改变str的指向,然后结果显示fun2并不能改变原来指针的指向,这是因为传到fun2里的参数str是原来数组指针值的复制,在fun2中对拷贝的指针改变当然不会影响到原来的指针指向。
在fun3中我们加上了指针的引用,因为引用是变量的别名,所以相当于对实参直接操作,所以能改变str的指向。
在fun4中我们传递的是指针的指针,指针理解为变量的地址,那么指针的指针就是指针的地址。假设变量a,指针p1指向a,那么p1变量存的就是a的地址,我们再用变量p2存p1的地址,p2就是指针的指针。因为p2的值是p1的地址,所以对p2指向的内存操作会直接影响p1的值,p1的值也就不再指向原来的a了。
总结:若想在函数中改变某变量的值,传指针(地址)就够了;若想改变某指针的指向,那就要传指针的地址(也就是指针的指针)才行。总之,想要对什么变量的实际做修改,必须得到他的地址才行。
#Everyday can make a difference