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