我们可以简单的把引用理解为起别名(外号)
基本语法
数据类型 &别名 = 原名 引用必须初始化 ,初始化后不可改变
#include <iostream>
using namespace std;
int main() {
int a = 0;
int &a1 = a; //给变量a起别名
cout << &a << " " << &a1 << endl;
cout << a << " " << a1 << endl;
return 0;
}
建立变量a,创建a的引用a1是给变量a的内存空间起了别名
引用做函数参数
引用做函数参数来使用,就行指针一样可以改变实参! 但引用的使用和理解比指针更容易!
#include <iostream>
using namespace std;
void swap(int &a, int &b){
int c = a;
a = b;
b = a;
}
int main() {
int num1 = 10;
int num2 = 100;
cout << num1 << " " << num2 << endl;
swap(num1, num2);
cout << num1 << " " << num2 << endl;
return 0;
}
对引用a、b的操作本质就是对实参sum1、sum2的操作
引用做函数返回值
引用可以作为函数返回值,但不可以返回局部变量引用。因为当函数结束时, 函数内局部变量便会被编译器释放,此时返回引用会出错。
#include <iostream>
using namespace std;
int sum = 100;
int& swap(){
return sum; //虽然返回是a,但不要忘了int&
}
int main() {
int a = swap();
cout << a << endl;
return 0;
}
函数调用做左值 ,函数也是对象!
#include <iostream>
using namespace std;
int sum = 0;
int& swap(){
return sum; //虽然返回是a,但不要忘了int&
}
int main() {
swap() = 100; //swap()做左值 &sum = 100
cout << sum << endl;
return 0;
}
常量引用
常量引用主要用于修饰形成,防止误操作
#include <iostream>
using namespace std;
int sum = 100;
void show(const int& a){ //此时a的值不可更该
//a = 1; //错误操作
cout << a << endl;
}
int main() {
int sum = 10;
show(sum);
return 0;
}
常量引用const int &a 编译器会做以下操作:
- 建立临时变量接收数据 int temp =
- 进行引用 const int &a = temp