C / C++系列 (5):指针 vs. 引用

这篇博文主要讲讲指针与引用之间的相同点和不同点。对于使用不做介绍(太熟了)

相同点

  1. 都是地址概念
    指针为指向一块内存,它的内容是所指内存的地址。
    引用是某块内存的别名,使用相同的地址,相当于一个变量有两个名字。

指针引用之间的转换:

  • 指针转引用:把指针用*就可以转换成对象,可以用在引用参数当中。
  • 引用转指针:把引用类型的对象用&取地址就获得指针了。
int a = 0; 
int *pA = &a; 
void fun(int &va){}     // 定义
fun(*pA);               // 调用   

不同点

  1. 指针是一个实体,而引用仅是个别名 ;
  2. 指针和引用的自增(++)运算意义不一样,指针是对 内存地址 的自增,引用是对 指针指向的值 的自增量;
  3. 引用使用时无需解引用(*),指针需要解引用;
  4. 引用不能为空,指针可以为空;
    例如:
int ival = 1024;
int &refVal = ival;     //refVal指向ival(是ival的另一个名字)
int &refVal2;		//报错:引用必须被初始化
一般在初始化变量时,初始值会被拷贝到新建的对象中
然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用
一旦初始化完成,引用将和它的初始值对象一直绑定在一起
  1. 引用只能在定义时被初始化一次,之后不可变;指针可变,例如:
  2. sizeof 引用”得到的是所指向的变量(对象)的大小 (数据类型决定) ,而“sizeof 指针”得到的是指针本身的大小,在32位系统指针变量一般占用4字节内存。
  3. 引用没有const,指针有const。const的指针不可变;(具体指没有int& const a这种形式,而const int& a是有的,前者指引用本身即别名不可以改变,这是当然的,所以不需要这种形式,后者指引用所指的值不可以改变)。对于const的详解请移步博文:
  4. 引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为NULL,所以不安全。const 指针虽然不能改变指向,但仍然存在空指针,并且有可能产生野指针(即多个指针指向一块内存,free掉一个指针之后,别的指针就成了野指针)。

总结: 指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用不改变指向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>