• 2 引用


    本质:给变量起别名

    必须初始化,初始化完不可以改变。

    优点:简化指针修改实参!非常有用,降低了指针的难度

    #include<iostream>
    using namespace std;
    
    // 1.值传递
    void mySwap01(int a, int b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
    
    // 2.地址传递
    void mySwap02(int* a, int* b) // 指针接收地址
    {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    // 3.引用传递
    void mySwap03(int& a, int& b) // 本质:别名
    {
        int temp = a;
        a = b;
        b = temp;
    }
    
    int main()
    {
        int a = 10;
        int b = 20;
        mySwap01(a, b); // 值传递,形参不会修饰实参
        mySwap02(&a, &b); // 地址传递,形参会修饰实参
        mySwap03(a, b); // 引用传递,形参也会修饰实参
    
        return 0;
    }

    #include<iostream>
    using namespace std;
    
    // 引用做函数的返回值
    // 不要返回局部变量的引用
    int& test01() // 引用方式返回
    {
        int a = 10; //  局部变量存放在栈区
        return a;
    }
    
    // 函数的调用可以作为左值
    int& test02()
    {
        static int a = 10; // 静态变量,存放在全局区,数据在程序结束后系统释放
        return a;
    }
    
    int main()
    {    
        //int& ref = test01();
        //cout << "ref = " << ref << endl; // 第一次打印是正确的,因为编译器做了保留
        //cout << "ref = " << ref << endl; // 第二次结果是错误的,因为a的内存已经释放
        int& ref2 = test02(); // 本身就是a的别名
        cout << "ref2 = " << ref2 << endl; // 因为是静态变量
        cout << "ref2 = " << ref2 << endl;
    
        test02() = 1000; // 因为函数调用返回的是一个引用,这个函数调用可以作为左值   a = 1000
    
        cout << "ref2 = " << ref2 << endl;
        cout << "ref2 = " << ref2 << endl;
    
        return 0;
    }

    指针常量:指针指向不能改变

    引用的本质就是一个指针常量!

    这也就是为什么一旦初始化不可以发生改变的原因。

  • 相关阅读:
    debian 安装deb软件
    Linux的发行版之间的联系和区别
    Linux软件包安装(rpm、yum、apt-get)
    在deepin中安装docker
    使用BeanUitls提高对象拷贝效率
    Nginx下载和安装与启动
    Spring Boot 的项目打包成的 JAR 包,制作成 docker 镜像并运行
    Java并发编程实战(使用synchronized实现同步方法)
    Java7并发编程实战(一) 守护线程的创建和运行
    Java7并发编程实战(一) 线程的等待
  • 原文地址:https://www.cnblogs.com/masbay/p/14282159.html
Copyright © 2020-2023  润新知