【C++】1___引用
一、基本语法
数据类型 &别名 = 原名
#include<iostream>
using namespace std;
int main(){int a = 10;int &b = a;cout<<"a="<<a<<endl; // a=10cout<<"b="<<b<<endl;// a=10b = 20;cout<<"a="<<a<<endl;// a=20cout<<"b="<<b<<endl;// a=20return 0;
}
注意:1、引用必须初始化
2、一旦初始化,就不能更改
二、做函数参数、返回值
做函数参数,与地址传递效果相同,形参会修饰实参
#include<iostream>
using namespace std;
void test(int &a,int &b){int tmp = a;a=b;b=tmp;
}int main(){int a = 10;int b = 20;test(a,b);cout<<"a="<<a<<endl; // a=20cout<<"b="<<b<<endl; // b=10return 0;
}
做函数返回值,返回静态变量引用。
在有些编译器中,返回局部变量引用时,首次会返回正确,以后就会返回一个错误值(原因是首次访问时编译器对局部变量做了保留,后面会将这个栈区的内容释放掉)
#include<iostream>
using namespace std;
int& test(){static int a = 10;return a;
}int main(){int& ref = test();cout<<"ref="<<ref<<endl; // ref=10ref = 1000;cout<<"ref="<<ref<<endl; // ref=1000return 0;
}
三、本质
本质就是一个指针常量
数据类型 &别名 = 原名 --> 数据类型 *const 别名 = &原名
#include<iostream>
using namespace std;int main(){int a = 10;int &b = a; // 相当于 int * const b = &a; 这里也说明引用后就不能更改b = 20; // 相当于 *b = 20;return 0;
}
四、常量引用
可以利用常量函数防止误操作修改值
#include<iostream>
using namespace std;int main(){// int &b = 10; // 错误,需要一个合法的内存空间const int &b = 10; //正确,编译器自动转化为:int tmp = 10; const int &b = tmp; (tmp只是举例,具体由编译器决定)
// b = 20; //加上const后不可修改变量cout<<"b="<<b<<endl; //b=10return 0;
}