【C++】图解函数传参传值、传地址、传引用的区别

1、传值就像图中一样传的是原来实参的一份拷贝,对形参进行操纵不会改变实参的值,函数返回后,函数栈帧销毁,这份拷贝也会自动被回收
这里写图片描述
2、传指针就是为实参创建一个指针变量,指针变量里面存的就是实参的地址,对形参进行操作也会通过指针的间接访问对实参进行修改,所以对形参的操作会影响原来的值
这里写图片描述
3、传引用什么也没创建,只是给实参取了个别名,就像同学之间取外号一样,张三是这个同学,铁蛋也是这个同学,两个名字可是指的就是一个人,对引用进行操作就等于对实参的操作,对引用的操作会影响原来的实参
这里写图片描述
下面来看一下指针和引用的区别?
(1)非空区别
在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某个对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你就可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针要高
(2)合法型区别,
在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。
(3)可修改区别
指针与引用的一个重要区别是指针可以被指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指向的对象,以后不能改变,但是指定的对象其内容可以改变
(4)应用区别
在以下情况下使用指针:一是考虑存在不指向任何对象的情况(这种情况下,能够设置指针为空),二是需要能够在不同时刻指向不同的对象(在这种情况下,你能改变指针指针的指向)如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么应该使用引用。
(5)其他区别
1)引用在定义时必须初始化,指针没有要求
2)没有NULL引用,只有NULL指针
3)在sizeof中含义不同,引用是引用类型的大小,指针始终是地址空间的字节大小
4)引用自加改变变量的内容,指针自加改变了指针的指向
5)有多级指针但没有多级引用
6)引用比指针用起来相对更安全

猜你喜欢

转载自blog.csdn.net/flowing_wind/article/details/81225139