引用类型

王朝百科·作者佚名  2009-11-19  
宽屏版  字体: |||超大  

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

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有