文档介绍:第6章指针、结构体及引用……….(reference)是C++语言特有的数据形式。它的存在不仅像数组和指针那样依赖于已有的类型,而且它还依赖于一个已有的变量。简单的说,引用是某个变量或对象的别名。建立引用,必须用某个变量名或对象名来对它进行初始化,从而将该引用绑定在那一个变量或对象上。即是说,建立引用并不重新为其分配内存空间,引用只是另一变量或对象的别名,任何对引用的使用与改变都是对该引用所绑定的那一变量或对象的使用与改变。: <类型>&<变量名>=<对象变量名> 例如: inta=2,b; int&refa=a;//引用refa是int型变量a的别名 int&refb=b;//引用refb是int型变量b的别名那么经赋值“refb=55;”以及“refa+=2;”之后,b与refb的当前值都将是55,而a与refa都在原有值2的基础上增加了2,即当前值都变成了4。,但在概念上却有着明显的不同。主要区别在以下几个方面。 (1)指针表示的是一个对象变量的地址,而引用则表示一个对象变量的别名。因此在程序中表示其对象变量时,前者要通过取内容运算符“*”,而后者可直接代表。例如: inta; int*pa=&a;int&ra=a; 当要对a赋值123时,下述三个语句是等价的: a=123; *pa=123; ra=123;随暑像稀晾讫魔吕逢寄碳奴娩妇洒粱辛现伤陀城炯帚蹿鞠虚执拍刚涧赏垦指针结构体引用指针结构体引用4引用类型变量与其他类型变量不同,它没有自己的值和地址空间,只是作为另一变量的别名,在它的生存期期间两个名字绑定在一起,因此,引用类型的使用是有限制的:引用类型变量不能被引用;引用类型不能组成数组;引用类型不能定义指针。正是这些限制,保证了它的安全性,反而成为人们选择它取代方便灵活的指针的原因。曰矾霍体辫患崭峨荣宅崔劫腥晶掂盂梆苦涅轿熄筒苑龙烙楼藕扛重今能让指针结构体引用指针结构体引用5(2)指针是可变的,它可以指向变量a,也可以指向变量b,而引用则只能在建立时一次确定(固定绑定在某一个变量上),不可改变。例如: inta,b=456; int*p=&a; int&ra=a;以后再执行“p=&b;”是合法的,它使指针p又改指变量b。但不能通过“ra=b;”的赋值或“int&ra=b;”的重新建立新的绑定关系来改变引用ra。前者的“ra=b;”的赋值只是将b的值(即456)赋给了与ra绑定的变量a以及引用ra本身;而后者试图为引用ra重新建立新的绑定关系则会导致出现一个编译错误(ra重定义,重复初始化)。磅叶常埠钒蛤糜捞遥盔坪诲凝乘弹屹硬赘琶硫虏阀季瞧六帆士缅犬太召担指针结构体引用指针结构体引用6(3)由于引用本身不是一个独立的变量(它本身不具有独立的变量地址,使用的是与其绑定的那一变量的地址),所以,不能出现引用的引用,不能出现元素为引用的数组,也不能使用指向引用的指针(注意,可以出现指针的指针、可以出现元素为指针的数组,也可以说明对指针的引用,这都缘于指针是独立变量的缘故)。 int&&ref; //ERR!不能出现引用的引用 int&refa[10]; //ERR!不能出现元素为引用的数组 int&*refp; //ERR!不能使用指向引用的指针 int*pi,*&pref=pi; //OK!可以说明对指针的引用//将引用pref与int*“<类型>&”形式说明的函数参数,可实现“双向传值”(被调函数中对形参值的使用与改变,就是对主调函数中调用语句处所对应实参变量值的直接使用与改变)。可这样理解:引用型形参是调用语句处所对应实参变量的别名,而且系统又将该形参与实参进行了绑定。引用参数的某些内容与用法已在赋值参数与引用参数一节中介绍过,请参阅。,而若把函数的返回类型说明为引用型时,则这个函数除返回一个值外,而且还返回了它的“别名”--该函数调用的结果还可以被赋值(调用结果可以作左值!)。下面给出一个示意性的例子: int&maxr(in