zoukankan      html  css  js  c++  java
  • C++中函数变量的引用 &

    给别人起绰号是件不好的事情,但是在程序设计中,给变量或参数起个绰号却会给我们带来一些方便。绰号,就是另一种称呼。绰号和本名都是指同一样东西,绰号也是个名称,所以它的命名规则其他的命名规则一样,详情可参见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的操作了
    声明引用的语法格式为:
        变量数据类型 &引用名=已声明的变量名;

    这个和C#的ref与OUT其中有什么奥秘? 

  • 相关阅读:
    jsp页面a标签URL转码问题
    函数的真面目实例
    野指针和内存操作实例
    redhat安装VMware tools的方法
    线索化二叉树实例
    遍历二叉树实例
    创建二叉树实例
    树的存储结构实例
    树的定义实例
    HBase基础和伪分布式安装配置
  • 原文地址:https://www.cnblogs.com/Luouy/p/2630454.html
Copyright © 2011-2022 走看看