c++ 引用和指针的区别

今天看钱能的C++,书中具体说明了区别和引用的本质

引用与指针的差别: 指针可以操作两个实体,一个是指针值,一个是指向的值,因此指针可以改变关联的实体,即指向的实体.而引用只能操纵一个实体.

#include <iostream>

using namespace std;

int main()
{
    int a = 10,b = 20;
    int &ra = a;    //引用a
    int *pa = &a;   //指针pa

    cout<<"&ra: "<<&ra<<"  ra: "<<ra<<endl;
    cout<<" &a: "<<&a<<"   a: "<<a<<endl;
    cout<<"&pa: "<<pa<<" *pa: "<<*pa<<endl;
    ra =15;
    pa =&b;
    //ra =&b; //报错
    cout<<"&ra: "<<&ra<<"  ra: "<<ra<<endl;
    cout<<" &a: "<<&a<<"   a: "<<a<<endl;
    cout<<"&pa: "<<pa<<" *pa: "<<*pa<<endl;
}

//最后结果
&ra: 0x6afef4  ra: 10
 &a: 0x6afef4   a: 10
&pa: 0x6afef4 *pa: 10
&ra: 0x6afef4  ra: 15
 &a: 0x6afef4   a: 15
&pa: 0x6afef0 *pa: 20

指针既可以改变所指向的实体,也可以改变所指向的实体的值。而引用只可以改变指向的实体的值。

这是因为实体在编译的时候将这个特殊的指针ra转换为*ra操作。(等价于ra就等价于*pa) 这就是为什么引用不能操作自身的地址,每次访问ra,实际上是在访问所指向的a实体。

与指针比较,引用隐去了地址操作,引用封锁了这种地址的可修改性,使得间接访问操作相对来说更安全了,也就隔离了万恶之源.

猜你喜欢

转载自www.cnblogs.com/Triomphe/p/9383377.html