指针和引用的异同

1. 指针
指针传递参数实质上是值传递,它所传递的是一个地址值。值传递的过程中,被调函数的形式参数作为被调用函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实际参数的变量的值。
2. 引用
在引用传递中,被调函数的形式参数虽然也是作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数传入的实参的地址(int &a的形式),被调函数对形参的任何操作都是间接寻址,即通过栈中的地址直接访问主调函数中实参的地址,所以在被调函数中修改形参时会对主调函数的实参有影响。

指针和引用的相同点

都要地址的概念,指针指向一块内存,他的内容就是所指内存的地址,而引用则是那块内存的别名。

指针和引用的不同点

(1)指针是一个实体,而引用只是一个别名。
(2)引用只能在定义时被初始化一次,之后不可变;指针可变。引用 “从一而终”,指针 “见异思迁”。
(3)引用没有const,指针有const,const的指针不可变;(存在const int &a,表示引用的值不可变)。
(4)引用不能为空,指针可以为空。
(5)“sizeof 引用” 得到的是引用对象的大小,“sizeof 指针”得到的只是指针本身的大小。
(6)指针和引用的自增++意义不一样。
(7)引用是类型安全的,而指针不是(引用比指针多了类型检查)。

性能上的区别
在传大型对象的时候,传引用比传指针好,引用不会拷贝副本,而指针会。

本文标题:指针和引用的异同

文章作者:Tokey

发布时间:2019年03月19日 - 21:03

最后更新:2019年07月12日 - 15:07

原始链接:http://TokeyRoad.github.io/2019/03/19/指针和引用的异同/

许可协议: 转载请保留原文链接及作者。

0%