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;
    }

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

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

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

  • 相关阅读:
    世界史上最著名的十大思想实验
    excel 鼠标上下左右移动
    excel 批注
    C# TextWriter类
    C#中的Hashtable
    cython安装、使用
    Java JsonPath grab InvalidPathException in code, you must be catching Java 7's java.nio.file.InvalidPathException instead of JsonPath's com.jayway.jsonpath.InvalidPathExceptio
    Java牛角尖【007】:Java中的Error能不能被Catch
    2016亚洲城市GDP50强出炉
    全国5A级旅游景区已达250家
  • 原文地址:https://www.cnblogs.com/masbay/p/14282159.html
Copyright © 2011-2022 走看看