首页 > 编程 > C++ > 正文

C++教程:C++中函数变量的引用

2020-05-23 14:27:43
字体:
来源:转载
供稿:网友
给别人起绰号是件不好的事情,但是在程序设计中,给变量或参数起个绰号却会给我们带来一些方便。绰号,就是另一种称呼。绰号和本名都是指同一样东西,绰号也是个名称,所以它的命名规则其他的命名规则一样,详情可参见3.1。另外,“绰号”显然也不能和“本名”相同。

这种给变量起“绰号”的操作称为引用(Reference),“绰号”称为引用名。声明引用的语法格式为:
    变量数据类型 &引用名=已声明的变量名;

我们对变量使用了引用以后,对引用的操作就如同对被引用变量的操作。这就好像叫一个人的绰号和叫一个人的本名有着同样的效果。在声明一个引用时,必须告知电脑到底是哪个变量被引用,否则这个“绰号”就显得有些莫名其妙了。

下面我们来看一段简单的程序:(程序6.5.1)
#include "iostream.h"
int main()
{
   int a=2;
   int &b=a;//给变量a起了个绰号叫b
   cout <<"a=" <<a <<endl;
   cout <<"b=" <<b <<endl;
   a++;
   cout <<"a=" <<a <<endl;
   cout <<"b=" <<b <<endl;
   b++;//对b的操作也就是对a的操作,所以b++就相当于a++
   cout <<"a=" <<a <<endl;
   cout <<"b=" <<b <<endl;
   return 0;
}

运行结果:
a=2
b=2
a=3
b=3
a=4
b=4

我们在这个程序中,能够验证对引用的操作相当于对被引用变量的操作。或许你还没看出引用到底派了什么大用处,不过马上你就会恍然大悟了。

用引用传递参数

其实引用最有用的地方还是在函数当中,下面我们先来看一个简单的例子:
#include "iostream.h"
void swap(int x,int y);
int main()
{
   int a=2,b=3;
   swap(a,b);
   cout <<"a=" <<a <<endl;
   cout <<"b=" <<b <<endl;
   return 0;
}
void swap(int x,int y)
{
   int temp;
   temp=x;
   x=y;
   y=temp;
}

运行结果:
a=2
b=3

在以上这段程序中,swap函数的语句是我们熟悉的交换语句,可是为什么执行了这个swap函数以后,a和b的值并没有交换呢?

在6.2中,我们介绍过,函数是将实参的值赋给了形参。这就像本来我们想交换a碗和b碗里的水,调用了swap函数则是拿来了x碗和y碗,然后把a碗里的水分一点到x碗里,b碗里的水分一点到y碗里,再把x碗和y碗里的水交换。可是,这样的操作有没有将a碗里的水和b碗里的水交换呢?没有。而且,我们还知道,一旦函数运行结束,函数中定义的参数和变量就都会消失,所以就连x碗和y碗也都没有了。

问题到底在于哪里呢?在于我们传给函数的是“水”,而不是“碗”。如果我们直接把a碗和b碗交给函数,那么这个任务就能够完成了。下面我们就来看看如何把“碗”来传递给函数:(程序6.5.2)
#include "iostream.h" 
void swap(int &x,int &y);//用引用传递参数
int main()
{
   int a=2,b=3;
   swap(a,b);
   cout <<"a=" <<a <<endl;
   cout <<"b=" <<b <<endl;
   return 0;
}
void swap(int &x,int &y)//函数定义要和函数原型一致
{
   int temp;
   temp=x;
   x=y;
   y=temp;
}

运行结果:
a=3
b=2

如果我们把没有使用引用的参数认为是int x=a和int y=b(把变量a和变量b的值分别传给参数x和参数y),那么使用了引用的参数就是int &x=a和int &y=b了。也就是说x和y成为了变量a和变量b的“绰号”,对参数x和y的操作就如同对变量a和b的操作了。

除了在引用变量和通过引用传递参数外,引用还能被函数返回。关于这些内容,有兴趣的读者可以查阅相关书籍资料。
6.6*
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表