引用也可以作为一个函数的参数,如:我们定义交换两个数的函数swap,将函数的参数定义成引用的形式:
1 void swap(int &p1, int &p2) //此处函数的形参都是引用 2 { 3 int p; 4 p=p1; 5 p1=p2; 6 p2=p; 7 }
为了在程序中调用该函数,在相应的主调函数的调用点处直接以变量作为实参进行调用即可,而不需要对实参变量有任何的特殊要求。如上面定义的swap函数的主调函数可写为:
int main() { int a,b; cin >> a >> b; //输入a,b两变量的值 swap(a,b); //直接以变量a和b作为实参调用swap函数即可 cout << a << ' ' << b; return 0; }
当发生函数调用时,主调函数的调用点处的实参变量a和b分别传递给被调用函数的形参p1和p2,由于形参p1和p2定义成引用的形式,所以这时p1就是实参a的引用,p2就是实参b的引用。所以,在被调函数swap中,任何对形参p1和p2的操作实质就是对实参a和b的操作。
由此,有几点需要注意:
- 传递引用给函数与传递指针的效果是一样的,这时被调函数的形参就作为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作;
- 使用引用传递函数的参数在内存中并没有产生实参的副本(因为引用只是目标变量的别名而不是一个新的变量),且它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时需要给形参分配存储单元,这样形参与实参就占用不同的存储单元,所以形参变量的值时实参变量的副本。因此,当参数传递的数据量较大时,用引用比较好。
- 使用指针作为函数的参数虽然也能达到与使用引用一样的效果,但是,在被调函数中需要重复使用“*指针变量名"的形式进行运算,容易产生错误且程序的阅读性较差。
本人自学,教材可能有点老,有问题的话求大家指正!!!谢谢!!!