目录
引用就是给一个变量起别名
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int a = 10;
int &b = a;
b = 20;
cout << a << endl;
return 0;
}
此时b是a的别名,修改了b也就修改了a
int &b;
这样是错误的,没有初始化?
int &b = a;
b = c;
这样是错误的,初始化后又对它进行了改变
它并没有更改引用,而是进行了赋值的操作,将c的值赋值给了b
而b是a的引用,所以最后abc均相等,且值都为c的值
可以简化指针做函数参数
也是形参修饰实参
举例:
交换函数
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
void swap(int &a,int &b){
int t = a;
a = b;
b = t;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int a = 10;
int b = 20;
swap(a,b);
cout << a << endl << b << endl;
return 0;
}
因为局部变量存在栈空间里,当函数执行完时,内存也会被释放掉
static静态变量,不会因为函数执行完就被释放掉
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int& test(){
static int a = 10;
return a;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int& b = test();
cout << b << endl;
test() = 200;
cout << b;
return 0;
}
引用在c++里本质上是一个指针常量?
指针的指向不可以修改,指针指向的值可以被改动
用来修饰形参,防止误操作?
const int & a = 10;
//实际上这段代码的意思是
//int temp = 10;
//const int & a = temp
编译器帮了我们,使我们可以写得更加简洁
此时的a不可修改值
void print(const int & b){
b = 20;//错误的,此时b的值不可以修改
printf(b);
}
这样使用常量引用,防止了可能的修改,防止误操作