C++ 引用和指针的区别

众所周知,引用是某一个变量的别称。指针是一个变量,变量的内容是某一个变量的地址

下面从实现方式和应用两个维度剖析这两者的不同

指针的实现

指针从本质上来讲还是一个变量。和普通变量不一样的是:指针变量中存放的是其他变量的地址(变量都是需要占用存储空间的,有一个对应的地址)。

引用的实现

之前自己理解的引用不是变量。是在编译期间被编译器替换掉的一个符号,相当于是一个宏。这个理解是错误的。引用是一个变量,实现上可以把他当成一个不能改变其内容的指针。看下面代码的反汇编

源码:

#include <stdio.h》
#include <stdlib.h>
#include <string.h>

void func(int& a) {
    a = 1;
    printf("func a address:%p\n", &a);
    return;
}

int main(int argc, char* argv[]) {
    int mainA = 2;
    printf("main mainA address:%p\n", &mainA);
    func(mainA);
    int & A = mainA;
    A = 3;
    printf("main A address:%p\n",&A);
    return 0;
}

函数func对应的汇编代码

0804841d <_Z4funcRi>:
 804841d:       55                      push   %ebp
 804841e:       89 e5                   mov    %esp,%ebp
 8048420:       83 ec
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值