指针和引用的区别?
在C++的编码中我们发现很多地方都大量地使用引用,能用指针实现的功能改用引用几乎也能实现,甚至因为引用不需要拷贝的特性,使用起来比指针性能更高。
那么指针和引用又有什么区别呢?
更多关于指针的内容可以参考《C++之指针扫盲》
1、指针可以为空,引用必须初始化,引用不能为空
string& rs; //错误,引用必须初始化
2、指针可以被重新赋值,但是引用不行。也就是指针可以重新指向另外一个对象,而引用却不行,引用一直指向的都是最初的那个对象。
int main() {
string s1("hello");
string s2("world");
string &rs = s1;
string *ps = &s2;
rs = *ps; // 这不是将引用rs指向ps,而是将s1的值修改为了s2的值
ps = &s1;//将ps重新指向s1
std::cout << "s1:" << s1 << endl;
return 0;
}
3、指针可以有多级,而引用只能是一级
例如我们平时说的指向指针的指针,也就是二级指针,但是就没有所谓的指向引用的引用。
4、有了指针为什么还需要引用?
我们都知道指针在使用过程中需要特别地小心,很容易就出现空指针、野指针等