引用的概念
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。
举例来说:每个人也许都过被朋友起外号的经历,叫这个外号或你的名字都是在叫你。
引用也是如此,它就相当于它所引用的变量的外号,也就是一块空间有两个名称。
好,废话不多说,上代码来看:
int main()
{
int a = 1;
//别名的使用:int&
//注意:引用类型必须和引用实体是同类型的
int& b = a;//b是a的别名,相当于a与b共同指向一块空间
//打印a,b的地址,看是否都指向同一块空间。
cout << &a << endl << &b << endl;
return 0;
}
使用引用要注意:
1. 引用在定义时必须初始化
如果,不初始化,C++的编译器就不知道这个引用是谁的引用。
如:
2. 一个变量可以有多个引用
就好像,一个人可以有多个外号。
如:
int main()
{
int a = 10;
int& b = a;
int& c = a;
int& d = a;
cout << &a << endl << &b << endl;
cout << &c << endl << &d << endl;
return 0;
}
3. 引用一旦引用一个实体,再不能引用其他实体
4.区分引用和赋值
5.常引用
int main()
{
const int a = 10;
//int& ra = a; // 该语句编译时会出错,a为常量
const int& ra = a;
// int& b = 10; // 该语句编译时会出错,10为常量
const int& b = 10;
double d = 12.34;
//int& rd = d; // 该语句编译时会出错,类型不同
const int& rd = d;
return 0;
}
这里涉及到权限的问题,比如:常数是不可以被修改的,所以不能用:int&这种引用,需要加上const 修饰才可以。你不能说,你自己不能被修改,结果换了个名就可以修改了,这是不对的。你以为脱了马甲,编译器就不认得你了😜
那类型不同为什么,也用常引用呢?
怎样使用
我们了解了引用的使用规范,接下来,我们看看,在哪些场景下,可以使用这个引用。
1.引用作函数参数
以前,我们在用C语言写swap交换函数时,需要用到指针来接受传过来的实参,通过地址,达到形参改变实参的目的。现在C++有了引用,我们就可以将它作为函数的参数,也就是,实参的别名,这样也就达到了形参改变实参的目的。
例:
有了引用,我们可以直接将参数传递进去,不需要再想着传递变量的地址了。
2.引用作函数返回值
引用也可以作为函数的返回值,但是注意:
注意变量的作用域
例: