C/C++中的取地址与引用

取地址和引用都采用&的标识符,很容易让人造成误会。

就c/C++而言。引用只是C++中的知识,而取地址是两者共有的。

取地址:

在第6行中我定义了一个指向int类型的指针p,运用&a获取a的地址,并将a的地址赋予它,即p指向a所在的空间。

在第7行中取p所指向空间的值(*:有个高端名字叫解引用)输出。


引用:

在第6行我定义了一个引用b,并将a赋予b。其实质就是给a取了一个小名叫b。对a操作就是对b操作,如果改变b的值(eg。b=20),那么a的值也相应改变(a也会等于20)

从第7、8行更能反应我上面说的,a和b的值相等,并且地址也相同。因此引用是不占用空间的,仅仅是个别名而已。


在函数调用的时候也可能会混淆引用与取地址:

先看一下第2、3行的函数原型。两个函数的功能都是交换两个数。swap1的两个形参都是指针,而swap2的形参是两个引用。

再看一下第8行、第9行,调用swap1的时候传了两个地址给它(x=&a,y=&b),即x指向a的空间,y指向b的空间。调用swap2的时候传了两个引用给它(x=a,y=b),即x只是a的一个别名,y是b的一个别名,实则都代表同一块空间。


函数调用的时候,引用相对于指针来说更高效、跟简便。因为指针传参的实质还是传值调用,copy地址需要开销,而引用直接被编译器优化。有些时候需要二级指针的地方,使用指针的引用会使问题简化很多,我在对树的操作的时候就碰到过,大家可以感受一下。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值