C++ 的引用
基本用法
-
引用是已定义的变量的别名(另一个名字)
-
变量的引用与变量指向相同的值和内存单元
-
引用在定义的时候就要初始化,且引用不能在指向其他的变量
// 基本数据类型的应用
int nA = 10;
int& rA = nA; // rA 是 nA 的引用
double dB = 2.8;
double& rB = dB; // rB 是 dB 的引用
// 常量的引用
const int& nC = 12; // 常量是不能被修改的,nC 就是常量 12
// 数组的引用(确切的说是数组指针的引用)
int nArr1[5];
// 一维数组的引用,rArr1 是 nArr1 的别名,用法跟 nArr1 一样
int (&rArr1)[5] = nArr1;
int nArr2[2][3];
// 二维数组的引用,rArr2 是 nArr2 的别名,用法也是一样的
int (&rArr2)[2][3] = nArr2;
// 指针的引用
int nD = 10;
int* pD = &nD;
// rD 是 pD 的引用,它们的操作是一样的,rD 是 pD 的另一个名字
int* (&rD) = pD;
// 结构体的引用
struct Node {
int nVal;
double dVal;
}node = {10, 8.5};
Node &referNode = node; // referNode 是 node 的引用
// 类的引用
class CTest {
private:
int nVal;
double dVal;
public:
CTest(int n, int d) :
nVal(n),
dVal(d)
{ }
};
CTest test(10, 8.5);
CTest& rTest = test;
引用作形参 & 返回值
-
引用变量的主要用途是用作函数的形参,与指针类似函数将不再进行实参到形参的拷贝,对于处理大型的数据结构提供方便
-
引用作形参如果不需要改变原数据的值,应尽量使用 const
-
使用 const 可以避免无意中修改数据的编程错误
-
使用 const 使函数能够处理 const 和非 const 实参,否则将只能接受非 const 数据
-
使用 const 引用使函数能够正确生成并使用临时变量
-
引用作为返回值时,需要注意不要返回被调用函数局部变量的引用,局部变量在函数执行结束会被系统释放
#include <iostream>
using namespace std;
int& fun(int& a) {
a += 2;
return a;
}
int main() {
int nA = 6;
int& nB = fun(nA);
cout << &nA << "===" << nA << " " << &nB << "===" << nB << endl;
system("pause");
return 0;
}
引用和指针的区别
-
引用在声明的时候就要初始化,指针可以不初始化,但是一般指针会进行初始化,避免成为野指针
-
有空指针,没有空引用
-
引用不能指向其他变量,指针则可以任意指向
-
引用不占内存空间,指针占空间
-
引用效率更高,指针是间接操作
-
引用更安全,指针偏移可能会造成越界访问
-
指针更灵活,可以直接操作地址,指针更通用,C/C++ 都可以用