语法:数据类型 &别名 = 原名;
用别名操作原名的内存,相当于指针
!!引用必须初始化
引用初始化后不可以更改 相当于-> 指针常量
引用相当于指针,在编译的时候编译器直接做解引用操作
引用做函数的返回值
1.不要返回局部变量的引用
局部变量存放再栈区,当运行之后自动释放,第一次能得到正确的值,因为编译器保留第一次的值,之后的值就会直接释放掉,
2.函数的调用可以作左值
引用的本质:在c++中是一个指针常量:
1.常量指针:const int *p = NULL;指针指向的值不可以改变
2.指针常量:int *const p = NULL;一旦初始化后就不可以改变,指针指向是不可以改变的,指针指向的值是可以改变的的
优点:简化指针,语法方便,逻辑简单
#include "iostream"
#include "string"
using namespace std;
/*返回引用类型*/
int& add(){
//int a = 10;
//注意:不要返回局部变量的引用,在linux中编译都过不去
//return a;
static int n = 10;
return n;
}
/*交换函数 ->引用参数为引用,实现的为地址传递*/
int swap(int& a,int& b){
int c = 0;
c = a;
a = b;
b = c;
return c;
}
int main(void){
int a = 10;
int b = 20;
int t = swap(a,b);
cout<<"a<->b="<<t<<endl;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"----------------------"<<endl;
int& c = add();
cout<<"第一次用引用的返回:"<<c<<endl;
cout<<"第一次用引用的返回:"<<c<<endl;
/*引用做左值*/
add() = 2000;
cout<<"add()引用做左值:"<<add()<<endl;
cout<<"add()引用做左值的c:"<<c<<endl;
/*因为cadd()和c都是*/
return 0;
}