1) 引用是一个变量的别名
int n = 10;
int &m = n;
r = 20; //此时n = 20
2) 引用必须在声明的同时初始化
int *p;
p = &n; //ok
-----------------------------
int &m; //error
m = n; //error
-----------------------------
int &m = n; //ok
3) 引用的唯一性(引用一旦初始化,就不能在成为另一个变量的引用)
int n = 10;
int& m = n;
int a = 20;
m = a; //出问题了,虽然不报错,此步骤相当于让 把 a 的值赋值给了 n ,所以结果为 n == 20
m = 30 //此时 a == 20, 而不是 a == 30, 此时 n == 30, 所以 m 并没有成为 n 的引用
4) 不能有空引用
int *p = NULL;
int &m = NULL; //error (既然引用就是别名,那就和人一样,得有个人才能别一个名儿出来)
5) 不能声明引用型数组
char* pn[2];
char& m[2] = {a, b}; //error, 引用数组没有分配空间,无法保存元素地址,所以不存在引用数组
6) 一般引用不能应用常量,引用常量要用常引用
int &m = 10; //error
const int &m = 10; //OK
r = 20; //error
--------------------------------------------