• 两种&


    C++中&有两种含义:
            1)、取地址,例如:int* p = &a;
            2)、引用,例如:int& b = a。

    取地址时,&是一个一元运算符,返回的是操作数存放在内存中的起始位置(对于32位操作系统,是一个8位的十六进制数);

    引用时,它实际上就是被引用的变量,使用的是同一段内存地址内的数据,只是重新赋予了一个名字。在2)的例中,无论是b++还是a++,a和b两个值都会发生变化。对a和b取地址,会发现它们完全一样,&a == &b is true。

    在函数定义时,2)中的&会很有用。

    例如,写一个函数用来交换两个int变量的值:
    void exchange(int &a, int &b)
    {
            int tmp = a;
            a = b;
            b = tmp;
    }
    void main()
    {
            int x =1, y = 2;
            exchange(x,y);
            return 0;
    }
    假如,参数列表以(int a, int b)的形式,其结果,在exchange函数体中,a和b交换了值,但main中,x仍然是1,y仍然是2。

    &同样能用在函数返回值,例如
    int& max(int &a, int &b)
    {
            return a>b?a:b;
    }
    void main()
    {
            int x=1, y=2;
            max(x,y) ++ ;
            return 0;
    }
    运行结果,会发现y变成了3。因为max函数返回的是对大数的一个引用,也即是返回的就是y本身。在这个例子当中,去掉返回值限定中和形参表中的任何一个&都不能达成y+1的效果。

  • 相关阅读:
    Shell脚本
    数据结构 栈 java 自带的数据结构
    桃夭
    得道多助,失道寡助
    采薇
    离骚
    两小儿辩日
    鱼我所欲也
    生于忧患,死于安乐
    曹刿论战
  • 原文地址:https://www.cnblogs.com/mumuliang/p/1873575.html
Copyright © 2020-2023  润新知