zoukankan      html  css  js  c++  java
  • 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;
    }

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

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

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

  • 相关阅读:
    TensorFlow---基础---GFile
    TensorFlow---image recognition--classify_image运行、文件说明与错误(路径)解决
    gcc -D
    c语言数据读入---sscanf、fscanf
    Mysql--视图
    Mysql的索引
    每天学点linux命令之nc
    Redis基础---链接管理
    iOS WKWebview 网页开发适配指南
    Win7/Win10下搭建Go语言开发环境
  • 原文地址:https://www.cnblogs.com/masbay/p/14282159.html
Copyright © 2011-2022 走看看