既然引用可以实现指针的功能,而且更加方便,容易理解,那我们为什么还要使用指针呢,这是因为指针可以为空,而引用不能为空,
指针可以被赋值,但是引用只能被初始化,不可以被赋为另一个对象的别名,如果你想用一个变量记录不同对象的地址,那你就必须使用指针,
另外在堆中创造一块内存空间,就必须用指针来访问它,否则该空间就找不到了,当然我们也可以,使用引用来引用指向内存空间的指针
但是我们要明白一点,我们不可以使用引用来直接指向堆中的新建空间,因为引用只是个别名,它不可以作为指针来使用
int *p; int &r = p; 这句话是定义了指针p的别名, 而int &r = *p是定义了一个p指向的空间的别名
/*既然引用可以实现指针的功能,而且更加方便,容易理解,那我们为什么还要使用指针呢,这是因为指针可以为空,而引用不能为空, 指针可以被赋值,但是引用只能被初始化,不可以被赋为另一个对象的别名,如果你想用一个变量记录不同对象的地址, 那你就必须使用指针,另外在堆中创造一块内存空间,就必须用指针来访问它,否则该空间就找不到了,当然我们也可以 使用引用来引用指向内存空间的指针 但是我们要明白一点,我们不可以使用引用来直接指向堆中的新建空间,因为引用只是个别名,它不可以作为指针来使用 int *p; int &r = p; 这句话是定义了指针p的别名, 而int &r = *p是定义了一个p指向的空间的别名*/ #include <iostream> using namespace std; int main() { int *p = new int; int &r = *p; //这时候我们就可以用r这个别名来修改堆中数据了,r就是堆中p指向的对象的别名 r = 4; cout << *p << endl; cout << r << endl; return 0; }
原文:http://www.cnblogs.com/rain-1/p/4854205.html