引用类型 (
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#中也有引用类型。
-