zoukankan      html  css  js  c++  java
  • 两种&

    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的效果。

  • 相关阅读:
    HTML标签和属性三
    HTML标签和属性二
    HTML标签和属性一
    小程序相关面试题
    Vue路由的hash模式与history模式的区别?
    android中VideoView播放sd卡上面的视频
    Android中app开机自启动的开发
    java中byte,byte[]和int之间的转换
    Android多activity启动两种方式浅谈
    Android开发用到的几种常用设计模式浅谈(一):组合模式
  • 原文地址:https://www.cnblogs.com/mumuliang/p/1873575.html
Copyright © 2011-2022 走看看