引用类型

中文名 引用类型
含义 是c++的一种新的变量类型
目录导航

基本内容

 引用类型 ( reference type)
  由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。引用类型包括类、接口、委托和装箱 值类型。
  一些 计算机高级语言有引用类型这种变量类型。
  一、C语言中没有引用类型。
  二、C++中的引用类型:
  “引用”(reference)是c++的一种新的变量类型,是对C的一个重要补充。它的作用是为变量起一个别名。假如有一个变量a,想给它起一个别名,可以这样写:
  int a;int &b=a;
  这就表明了b是a的“引用”,即a的别名。经过这样的声明,使用a或b的作用相同,都代表同一变量。在上述引用中,&是“引用声明符”,并不代表地址。
  不要理解为“吧a的值赋给b的地址”。声明引用并不开辟内存单元,b和a都代表同一变量单元。
  注意:在声明引用变量类型时,必须同时使之初始化,及声明它代表哪一变量。在声明一个变量的引用之后,在本函数执行期间,该引用一直与其代表的变量相联系
  ,不能再作为其他变量的别名。下面的用法不对:
  int a1,a2;
  int &b=a1;
  b=a2;//企图使b变成a2的别名(引用)是不行的。
  例1:
  #include<iomanip.h>
  #include<iostream.h>
  void main()
  {
  int a=10;
  int &b=a;//声明b是a的引用,这样a的值变以后,b的值也变;b的值变以后,a的值也跟着变。
  a=a*a;
  cout<<b<<setw(6)<<b<<endl;
  b=b/5;
  cout<<b<<setw(6)<<a<<endl;
  }
  有了变量名,为什么还需要一个别名呢?C++之所以增加“引用”,主要是把它作为函数参数,以扩充函数传递数据的功能。
  我们知道,在C语言中,函数参数传递是单向的,所以例4不能实现两个 变量值的交换。C语言中,数组作为函数参数传递的是数组的首地址。
  C语言中,还可以利用指针变量做形参来实现两个变量值的换,但这种方式需要定义指针变量,需要额外开辟存储空间,来存放地址,见例3。而引用变量
  不是独立的变量,不单独占内存单元这种方法,实参向形参传送的是实参的地址(但与指针不同的是掉用函数时不需要&),而不是实参的值,见例2。
  看到&a这种形式时,怎样区分是指针还是引用呢?一般而言,见到前面有类型说明符(如int &a),是引用,而前面没有类型说明符时(如&a)认为是指针。
  例2:
  //函数参数传递之引用调用
  #include<iomanip.h>
  void swap(int &a,int &b)
  {
  int temp;
  temp=a;
  a=b;
  b=temp;
  }
  void main()
  {
  int i=3,j=5;
  swap(i,j);
  cout<<"i="<<i<<endl;
  cout<<"j="<<j<<endl;
  }
  例3:
  //函数参数传递之传地址调用(通过指针)
  #include<iomanip.h>
  void swap(int *a,int *b)
  {
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
  }
  void main()
  {
  int i=3,j=5;
  swap(&i,&j);
  cout<<"i="<<i<<endl;
  cout<<"j="<<j<<endl;
  }
  例4:
  //错误程序例:这个程序不能实现i和j值的交换。
  #include<iomanip.h>
  void swap(int a,int b)
  {
  int temp;
  temp=a;
  a=b;
  b=temp;
  }
  void main()
  {
  int i=3,j=5;
  swap(i,j);
  cout<<"i="<<i<<endl;
  cout<<"j="<<j<<endl;
  }
  备注:注意C++ 中引用类型与类的区别。
  参考文献: 东北大学出版社-李一波编著《 新概念C语言》218页
   清华大学出版社 陈天华编著《面向对象程序设计与Visual C++教程》73页
  三、C#中也有引用类型。

 

相关百科
返回顶部
产品求购 求购