引用
C++中的引用相当于给变量起了一个别名,而变量的实质就是一个内存单元,因此引用就是给一个变量起了一个别名。
& 和类型结合时,表示引用(比如 int& c=a;表示引用a对应的内存单元);&和变量结合时(比如 int *p=&a;表示取a的地址),表示取这个变量的地址。
#include<iostream>
using namespace std;
int main()
{
int a=10;
int b=20;
int& c=a;
int* p=&b;
cout<<"c:"<<c<<endl;
cout<<"*p:"<<*p<<endl;
return 0;
}
我们可以看到上述代码的部分汇编代码如下:
从汇编代码中我们可以看出引用在底层的做法是先把a的地址放在eax寄存器中,再把eax寄存器中的数据放在c所对应的内存单元下,也就是把a的地址放到c对应的内存单元里。在底层指针的操作同样是先把b的地址放到eax寄存器中,再把eax寄存器中的值放入p所指向的内存单元中,相当于p保存了b的地址。所以说引用和指针在底层的处理方式是一样的,引用相当于自带了解引用。因此,打印结果如下:
引用的注意事项
1.引用必须初始化;
2.不能引用不可以取地址的数据,比如如下代码是错误的;
int& a=10; //错误!
3.在语法层面上没有任何语法能够改变引用;
4.引用变量只能操作其所引用的变量。