C++基础知识
链接:https://zhuanlan.zhihu.com/p/38399566 本文主要提一下以下三个区别: 引用必须初始化,而指针可以不初始化。 我们在定义一个引用的时候必须为其指定一个初始值,但是指针却不需要。 int &r; //不合法,没有初始化引用 int *p; //合法,但p为野指针,使用需要小心 2. 引用不能为空,而指针可以为空。 由于引用不能为空,所以我们在使用引用的时候不需要测试其合法性,而在使用指针的时候需要首先判断指针是否为空指针,否则可能会引起程序崩溃。 void test_p(int* p) { if(p != nullptr) //对p所指对象赋值时需先判断p是否为空指针 *p = 3; return; } void test_r(int& r) { r = 3; //由于引用不能为空,所以此处无需判断r的有效性就可以对r直接赋值 return; } 3. 引用不能更换目标 指针可以随时改变指向,但是引用只能指向初始化时指向的对象,无法改变。 int a = 1; int b = 2; int &r = a; //初始化引用r指向变量a int *p = &a; //初始化指针p指向变量a p = &b; //指针p指向了变量b r = b; //引用r依然指向a,但a的值变成了b 引用的使用场景 只看两者区别的话