空指针解引用(nullpointer dereference)_C++|引用的本质是一个由编译器实现了自动解引用的指针常量...

1 指针常量的一个实例

#include using namespace std;void main(){int j=3;int var=4;int* p = &var;int* const pf = &var;*pf=8;int i = 5;cout<

2 上述指针常量写成引用的形式

#include using namespace std;void main(){int j=3;int var=4;int* p = &var;int& f = var;f=8;int i = 5;cout<

3 引用的本质是一个指针常量

从以上两个实例可以看出,引用是占用一个指针的内存空间的,但其引用本身的地址被编译器隐藏了,& f是其指向的变量的地址,而f由编译器实现的自动解引用,f自动解引用为其指向的变量的数据值。所以, 引用的本质是一个指针常量,一个由编译器实现了自动解引用的指针常量。

查看上面两个实例对应的汇编代码,发现其完全一致:

fce0cc3e4fa32f67e3a184ce8052ed81.png

凡是使用了引用变量的代码,都可以转换成使用指针常量对应形式的代码,只不过书写形式上要烦琐一些。反过来,由于对引用变量使用方式上的限制,所以使用指针常量实现的功能不一定能够用引用来实现。

函数返回一个引用可以用作左值:

#include using namespace std;int& g2(void){ static int a = 10; a++; printf("a:%d 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值