引用📖
1. 引用的定义
int a = 3;
int &r = a; // 此时叫做r引用a, r是a的别名
注意: 当初始化引用后就不能修改了
int b = 4;
r = b; //此时只相当于将 b 的值赋给 a;
2. 引用的作用
- 当 r 引用了 a , 对 r 修改对 a 也会生效
r = 7;
cout << a << endl;
cout << t << endl;
/* 输出:
7
7
*/
- 引用也可以引用 " 引用 "
int &r_to_r = r;
// 对 r_to_r 修改也是一样的效果, 和 r 同时引用了 a
3. 常引用
- 不能通过常引用去修改其引用的值
int a = 3;
const int &r = a;
r = 7; //这样是不行的, 编译出错
a = 7; //可以修改本身
-
常引用和非常引用的关系
- const ElemType & 和 ElemType & 是不同的类型
- ElemType & 或 ElemType 的变量可以用来初始化 const ElemType &
int a = 3; int &r = a; const int & r_static = r;
- 但const ElemType & 不能用来初始化 ElemType &
int a = 3; const int &r_static = a; int &r = r_static; // 编译出错 // 因为r_static为常引用(不可修改引用值), 不能通过另一个引用来试图修改
4. 实际运用
- 使用指针修改
void swap(int* a, int* b){
int temp = *a; *a = *b; *b = temp;
}
swap(&a, &b);
- 使用引用修改
void swap(int &a, int &b){
int temp = a; a = b; b = temp;
}
swap(a, b);
这么一对比, 是不是引用显得简洁的许多 !
5. 奇怪的返回值
int& getElement(int * a, int i)
{
return a[i]; // 定义返回值是引用类型
}
int main()
{
int a[] = {1,2,3};
getElement(a,1) = 10; // 将返回的a[1]的引用修改为10
cout << a[1] ; // 输出 10
return 0;
}