指针和引用的区别(附const指针)

先谈一谈const指针有关的内容。
主要有两种:
1、指向const类型的指针(指针可以指向其他对象,但是指针指向的对象必须是const,不能被修改)
2、const指针(指针指向的对象的内容可以被修改,但是指针不能指向其他的对象)
表达分别是:
1、const int* p;(推荐), int const* p;(两种都可以表示指向const类型的指针,推荐第一个表达方式)
2、int* const p(只有这一种表达方式,const指针)

记忆规则:*在const右边的时候表示指向const类型的指针,*在const左边的时候表示const指针。

或者可以这样理解,如 const int时把const int两个词当做一种数据类型(而不是单单看成int),所以这种数据类型的内容就没有const的限制了,但是指针指向的对象也要是const int才可以。

当然还有例如const int* const p;int const* const p;之类的。


引用:本质上是内存空间的别名,也就是该内存空间的另一个名字,所以引用和内存空间是绑定的,不能被拆散(真爱!!),所以引用天生加有const。

所以第一个区别,指针可以改变指向的地址,而引用至死不渝,所以指针需要不停地改变指向的对象的时候不能用引用。

同时,引用必须被初始化,而指针只定义不初始化。

指针和引用的其他区别,主要有以下几点:
1、有空指针,但没有“空引用”
2、有指针的指针,但没有引用的引用
3、有函数指针,但没有函数的引用
4、有指针数组,但没有引用的数组
5、指针有 void * 类型,引用没有。
6、指针是一个实体,而引用仅是个别名


下面是可以用引用,但不能用指针的:
1、const 引用可以绑定到右值(rvalue),而指针必须指向一个地址。
example:
1.1)const int &r = 0; // 初始化为常量
1.2)c++ 类中常用的,用 const 引用引用到临时对象
====================================================================
再说一个 const 引用跟 const 指针行为不同的:
绑定到不同类型时,const 引用会绑定到临时变量上,而对指针则不是:

 int main()  
 {  
     float f = 0.0;  
     const int *p = (const int *)&f;  // 不同类型的指针绑定  
     const int &r = f;                // 不同类型的引用绑定  
    cout << (int)f << " " << *p << " " << r << endl;  
    f = 1.0;  
    cout << (int)f << " " << *p << " " << r << endl;  
}  
改变了 f 的值之后,*p 的值改变了,而 r 的值还是 0.

因为在 r 实际上绑定到了一个值为 0 的 int 类型的 tmp 对象上去了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值