c++引用和指针

引用相关知识参见此文章:c++引用

那么引用和指针到底有什么区别呢?
答:看下面这段代码!!

int main()
{
    int a = 10;
    int *pa = &a;
    *pa = 20;
    
    int& ra = a;
    ra = 20;

    return 0;
}

汇编代码及执行过程如下:
在这里插入图片描述
因此,两者在底层处理方式:一模一样
  在底层:编译器在底层将引用按照指针的方式来进行处理的
  引用实际就是指针T& 就相当于 T* const
           const T& 相当于 const T* const
  在底层,引用变量实际是有空间的
  概念层面:引用就是变量的别名,与其实体公用同一块内存空间,编译器不会为引用变量开辟新的内存空间。
区别: 1、引用在定义期间必须初始化,而指针没有要求
   2、引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
   3、没有NULL引用(就是引用必须初始化),但有NULL指针
   4、在sizeof中含义不同;引用结果为引用类型的大小,但指针始终是地址空间所占字节数(32位平台下占 4 个字节,某些64位平台 8 个字节,有些64位系统是按32位系统来编译的
   5、引用自加即引用的实体加 1 ,指针自加即指针向后偏移一个类型的大小
   6、有多级指针,但是没有多级引用(有char **p,没有char&& rc = ch; 但是const char&& rrc = ‘c’;这种可以,叫右值引用,是c++11里的)
   7、访问实体方式不同,指针需要显式解引用,引用编译器自己处理
   8、引用比指针使用起来相对更安全(不会空引用,不能有空指针)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值