引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会为了引用变量开辟内存空间,它和它引用的变量公用同一块内存空间。如李白被称为诗仙。李白和诗仙都是同一个人。
语法:
类型& 引用变量名(对象名)=引用实体;
特性:
引用在定义时必须初始化
一个变量可以有多个引用
引用一旦引用一个实体,再不能引用其他实体
示例:
void TestRef(){
int a=10;
int &ra=a;//定义引用类型引用a
printf("%p\n",&a);
printf("%p\n",&ra);
}
需要注意的是,引用类型必须和引用实体是同种类型的。,他们之间的关系图如下:
可以看到他们都可以使用同一块内存空间,而且使用方法都是相同的,而且a可以取多个别名,相比指针少了一些更麻烦的操作。
引用可以用来做函数参数代码如下:
void Swap(int &left,int &right)
{
int temp=left;
left=right;
right=temp;
}
int main(){
int a=3,b=7;
Swap(a,b);
return 0;
}
这样不需要传地址也能交换两个实参的值,而且使用起来可以减少很多麻烦。引用和指针的区别,在语法概念引用就是一个别名,没有独立的空间,和其引用的实体公用同一块空间。因为引用不能更改而指针可以改所以引用不能进行比如逐个访问数据这种操作。所以引用很大程度上面代替不了指针。因为引用和核心是用来做参数,返回值的。函数的形参改变实参这时形参就像实参的别名,所以可以使用引用来减少代码量完成同样的工作,而且数值量比较大的时候使用引用能提高效率。