引用
T & 别名 = 目标变量原名
int a = 10; int& b = a; cout << &a << endl; cout << &b << endl; //输出结果:每次执行输出结果不一样因为是地址。 003DFEE8 003DFEE8
-
引用变量的类型必须与它的实体类型一致或者实体可转为引用类型。
-
引用必须初始化。
-
引用只能对引用一个实体,但一个实体可以有多个引用。
int b = 10; int c = 100; int& a = b; a = c;//这个不是把引用a名称给了c 而是把c的值赋给a 就相当于b=c; 你可以输出a,b,c的地址看一下 cout << a;cout << &b<<endl;
cout << &a << endl;
cout << &c << endl;
-
引用不是指针因为引用不是指向目标变量,而是给目标变量起新名字。
-
对引用的使用方法与原实体的使用方法一致
单独对5的解释 //对实体a的引用 int a = 10; int& b = a; cout << &a << endl; cout << &b << endl;//引用与原实体使用方法一致 //对实体指针p的引用 int* p = &a; int* bp = &p; cout << *p<< endl; cout << *bp << endl;//引用与原实体使用方法一致
笼统地讲,引用就是在原本变量的地址上重新加入一个新名称。
一、普通引用
①常量引用-变量:指引用名定义为常量,实体是变量
int a = 10; const int &b = a;//常量引用只能读不能写,但是原变量a可以写也可以写成const int &b=a; //上面是 int 转为 const int&
②常量引用-常量:
const int a = 100; const int & b = a; //类型一致 //也可以写成const int &b=a;
③变量引用-变量:省略
int a = 10; //可读可写 int& b = a; //可读可写
④变量引用-常量:不存在
int const a = 10; int & b = a;//错误,int const 无法转换为int
函数引用的前提知识
main 函数内的变量是全局变量,还是局部变量?
(1)main 函数内的变量不是全局变量,而是局部变量
(2)只不过它的生命周期和全局变量一样长而已
(3)全局变量一定是定义在函数外部的
二、函数与引用
(1)引用作为参数
我们想为什么会出现值传递、引用传递和指针所代表的地址传递呢?
void swap(int& left,int& right) { int tmp = left; left = right; right = tmp; } void main(){ int a = 10; int b = 20; swap(a,b); cout<<a<<endl; cout<<b<<endl;//结果会交换,值传递和地址传递就不再赘述了 }
我们可以用地址理解:
值传递:对新创建的地址空间上的内容进行操作。
用引用方法接收:是直接在实参的地址上对内容进行操作(只不过是换了个名儿)。
用指针方法接收:是重新创建了一个地址空间存放指针,但是指针指向了实参的地址,通过解指针可以对实参地址上的内容进行操作。
(2)引用作为函数返回值
①不要返回局部变量的引用--严重的错误
因为局部变量(除了main函数的局部变量)在,函数结束地址就被回收,别名就没有依托了。
②返回全局变量的引用