T & 别名 = 目标变量原名
int a = 10; int& b = a; cout << &a << endl; cout << &b << endl; //输出结果:每次执行输出结果不一样因为是地址。 003DFEE8 003DFEE8
-
引用变量的类型必须与它的实体类型一致或者实体可转为引用类型。
-
引用必须初始化。
-
引用只能对引用一个实体,但一个实体可以有多个引用。
-
引用不是指针因为引用不是指向目标变量,而是给目标变量起新名字。
-
对引用的使用方法与原实体的使用方法一致
单独对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; int const &b = a;//常量引用只能读不能写,但是原变量a可以写 //上面是 int 转为 int const&
②常量引用-常量:
int const a = 100; int const & 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<
我们可以用地址理解:
值传递:对新创建的地址空间上的内容进行操作。
用引用方法接收:是直接在实参的地址上对内容进行操作(只不过是换了个名儿)。
用指针方法接收:是重新创建了一个地址空间存放指针,但是指针指向了实参的地址,通过解指针可以对实参地址上的内容进行操作。
(2)引用作为函数返回值①不要返回局部变量的引用--严重的错误
因为局部变量(除了main函数的局部变量)在,函数结束地址就被回收,别名就没有依托了。
②返回全局变量的引用



