Reference(引用)
1. 引用的定义
引用就是另一个变量的别名
2. 声明引用变量的方法
int x; int& rx = x;
int x, &rx = x;
3. 引用的性质(非常重要)
-
通过引用所做的读写操作实际上是作用于原变量上
-
引用必须在声明的时候初始化。
-
引用一旦初始化,引用名字就不能再指定给其它变量
4. 引用类型做函数的参数:引用传递
-
(引用可做函数参数,但调用时只需传普通变量即可)
-
(在被调函数中改变引用变量的值,则改变的是实参的值)
5. 例子
5.1. 例1:通过值传参
//pass by value void swap(int x, int y){ int t; t=x; x=y; y=t; } int main() { int a=5, b{10}; cout << "Before: a=" << a << " b=" << b << endl; swap( a, b ); cout << "After: a=" << a << "b=" << b << endl; return 0; }
输出结果:
Before: a=5 b=10
After: a=5 b=10
5.2. 例2:通过指针传参
//pass by pointer void swap(int* x, int* y){ int t; t=*x; *x=*y; *y=t; } int main() { auto a{5}, b{10}; cout<< "Before: a=" << a << " b=" << b << endl; swap( &a, &b ); cout<< "After: a=" << a << "b=" << b << endl; return 0; }
输出结果:
Before: a=5 b=10
After: a=10 b=5
5.3. 例3:通过引用传参
//pass by reference void swap(int& x, int& y){ int t; t=x; x=y; y=t; } int main() { auto a{5}, b{10}; cout<< "Before: a=" << a << " b=" << b << endl; swap( a, b ); cout << "After: a=" << a << "b=" << b << endl; return 0; }
输出结果:
Before: a=5 b=10
After: a=10 b=5
# include <iostream> using std::cout; using std::cin; using std::endl; void swap1(int, int); void swap2(int*, int*); void swap3(int&, int&); int main(){ int x1{ 10 }, y1{ 5 }; cout << "通过值传递" << endl; cout << "Before a:" << x1 << " Before b:" << y1 << endl; swap1(x1, y1); cout << "After a:" << x1 << " After b:" << y1 << endl; cout << "通过指针传递" << endl; cout << "Before a:" << x1 << " Before b:" << y1 << endl; swap2(&x1, &y1); cout << "After a:" << x1 << " After b:" << y1 << endl; cout << "通过引用传递" << endl; cout << "Before a:" << x1 << " Before b:" << y1 << endl; swap3(x1, y1); cout << "After a:" << x1 << " After b:" << y1 << endl; system("pause"); return 0; } void swap1(int a, int b) { int t=0; a = t; t = b; b = a; } void swap2(int* a, int* b) { int t; t = *a; *a = *b; *b = t; } void swap3(int& a, int& b) { int t; t = a; a = b; b = t; }
6. 引用的性质的补充说明
int a { 0 }, b { 1 }; int& r { a }; // 引用变量 r 在声明的同时就要初始化,r是a的别名 r = 42; // 相当于 a = 42 r = b; // 相当于 a = b; 执行后 a 的值是1 // 此处不是让r变成b的引用 // 引用r声明并初始化后,r就不能再改为其它变量的引用 int& r2 = a; // 继续给a起别名 int& r3 = r; // 声明引用变量 r3,用r初始化 // 这个相当于 int& r3 = a; 因为 r 是 a 的别名
7. 常量指针引用
# include <iostream> int main(){ const char* x = "Hello"; //Hello为常量,应用常量指针 const char* y = "Aloha"; const char*& rx = x; //声明是就得指向 std::cout << x << std::endl; rx = "Hello World"; std::cout << x << std::endl; rx = y; //这里不是对y的引用,而是赋值,所以x改变 std::cout << x << std::endl; system("pause"); return 0; }