该文为中国大学MOOC上北京邮电大学崔毅东和杨谈老师主讲的《C++程序设计(面向对象进阶)》笔记整理
1. 引用的定义
引用就是另一个变量的别名
2. 声明引用变量的方法
int x;
int& rx = x;
const char* s = "hello";
const char*& rs = s;
或
int x,&rx = x;
const char* s = "hello", *&rs = s;
3. 引用的性质
-
通过引用所做的读写操作实际上是作用于原变量上
int x = 1; int& rx = x; std::cout << "before:" << x << std::endl; rx = 2; std::cout << "after:" << x << std::endl;
输出结果为:
before:1
after:2 -
引用必须在声明的时候初始化
int y = 2; int& ry; // error
-
引用一旦初始化,引用名字就不能再指定给其他变量
int x = 1; int& rx = x; int y = 0; rx = y;
此处 rx = y 实际是让 x = y;而不是让 rx 变成 y 的引用
4. 引用传递
- 引用可做函数参数,但调用时只需传普通参数即可
- 在被调函数中改变引用变量的值,实际改变的是实参的值
5. 举例子
-
值传参
#include<iostream> void swap(int x, int y) { int t = 0; t = x; x = y; y = t; } int main() { int x = 1; int y = 111; std::cout << "before: x = " << x << " ,y = " << y << std::endl; swap(x, y); std::cout << "after: x = " << x << " ,y = " << y << std::endl; return 0; }
输出结果为:
before: x = 1 ,y = 111
after: x = 1 ,y = 111 -
指针传参
#include<iostream> void swap(int* x, int* y) { int t = 0; t = *x; *x = *y; *y = t; } int main() { int x = 1; int y = 111; std::cout << "before: x = " << x << " ,y = " << y << std::endl; swap(&x, &y); std::cout << "after: x = " << x << " ,y = " << y << std::endl; return 0; }
输出结果为:
before: x = 1 ,y = 111
after: x = 111 ,y = 1 -
引用传参
#include<iostream> void swap(int& x, int& y) { int t = 0; t = x; x = y; y = t; } int main() { int x = 1; int y = 111; std::cout << "before: x = " << x << " ,y = " << y << std::endl; swap(x, y); std::cout << "after: x = " << x << " ,y = " << y << std::endl; return 0; }
输出结果为:
before: x = 1 ,y = 111
after: x = 111 ,y = 1