C++学习笔记(六):引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FUZHENQI/article/details/80961979

引用(Reference)是C++语言新增的概念,在声明时通过&来标记。引用是变量的别名,引用的主要用途是作为函数的参数以及函数的返回值。引用因其具有“变量一样的用法,指针一样的功能”在实际编程中,得到广泛应用。

一、引用的概念

引用是变量的别名,引用与变量的地址完全相同,二者的值也相同。

数据类型 &引用名=一个已定义的变量名

几点说明:
(1)&不是取地址符。
(2)声明引用的同时必须初始化,且不可改变这种别名关系。
(3)系统不会为引用额外分配内存空间。
(4)不能建立void类型的引用,引用的引用,指向引用的指针,引用数组。

int x=10,a[10];
void &r=x;     //错误,不能建立void类型的引用
int &&r=x;     //错误,不能建立引用的引用
int &*p=x;     //错误,不能机那里指向指针的引用
int &ra[10]=a; //错误,不能建立引用数组

二、引用作为形式参数

引用的最主要用途是作为函数的形式参数,用于在被调用时成为实际参数变量在被调函数中的别名,从而可以通过对引用的访问和修改达到对实际参数变量进行操作的效果。引用参数使得实际参数变量的作用域“扩大”到原先无法进入的被调函数中
注意:与引用参数对应的实际参数只能是变量,而不能是常量或表达式。如果对应是实际参数不能保证是变量,则不能使用引用参数

#include<iostream>
using namespace std;
int fun(const int &x, int &y, int z)
{
  //x++; 此句若作为函数的语句则报错,const限制后只能访问x,不能修改。
  z++;
  y=x+y+z;
  return y;              
}
int main()
{
  int a=1,b=2,c=3,d=0;
  count<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
  d=fun(a,b,c);  //第一个实际参数和第三个实际参数都不能被修改
  count<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
  return 0;
}

说明:常引用和值形式参数都不能修改实际参数值。但常引用的效率更高,无需另外分配内存空间。然而,常引用对应的实际参数只能是变量,相反,值形式的参数对应的实际参数可以是常量、变量、表达式等。

三、 引用作为返回值

引用返回函数的原型声明形式为:

类型名& 函数名(形式参数表)

引用返回函数的调用形式:
(1)可以作为独立的函数调用语句。
(2)可以作为表达式中的某一个运算对象使用。
(3)可以作为左值使用(即作为变量使用)。注:只有引用返回值函数才会有,值返回函数只有前两种形式。

fun(a, b, c);     //作为独立的函数语句,这时返回的引用值被忽略
d=fun(a, b, c);   //返回引用值
fun(a, b, c)=20;  //引用返回的函数特有的调用形式,相当于b=20;

四、引用与指针的区别

(1)引用是变量的别名,指针是指向变量的地址。
(2)引用必须初始化,指针可以时候赋值。
(3)引用不占用内存空间,指针占用4字节空间用于存放变量地址。
(4)引用总是安全有效的,指针不安全也不一定有效(误指或野指针)。
(5)实参为数组是,智能使用指针形参。因为不存在数组的引用,而指针可以获取数组首地址。

猜你喜欢

转载自blog.csdn.net/FUZHENQI/article/details/80961979