• c++对c的扩展----引用类型


    变量是一个内存的别名,程序通过变量名使用内存空间,当然一个内存空间可以起多个别名么?

    答案:可以,这就是c++中引用的由来,引用就是给变量起别名

    引用是c++的概念!!!况且声明引用的符号&十分像是取地址操作

    #include<iostream>
    #include<string>
    using namespace std;
    
    void main()
    {
        string name = "徐晓冬";
        string &name2 = name;//name2就是对name的引用
        name2 = "陈培昌";
        cout << "我是" << name << endl;
        cout << "哟~原来是老弟你" << endl;
        system("pause");
    }

    当然引用在定义的时候必须要初始化

    用途:交换数值

    #include<iostream>
    #include<string>
    using namespace std;
    
    void swapnum(int a,int b)
    {
        //int a = 2,
        int c = 0;
        //int b = 3;
        c = a;
        a = b;
        b = c;
    }
    
    void canswap(int &a,int &b)
    {
        int c = a;
        a = b;
        b = c;
    }
    
    void needleswap(int *a, int*b)
    {
        int c = *a;
        *a = *b;
        *b = c;
    }
    
    void main()
    {
        int a = 20;
        int b = 30;
        //needleswap(&a, &b);
        canswap(a,b);
        cout << "a:" << a << "b:" << b << endl;
        system("pause");
    }

    输出结果:

    •  引用的本质:其实和指针有异曲同工之妙
    #include"iostream"
    #include<string>
    using namespace std;
    struct mycoach
    {
        string name;
        string &hiscoachname;
        int &age;
    };
    
    
    
    void main()
    {
        
        string coach = "徐晓冬";
        printf("struct实例地址是%d
    ", sizeof(coach));
        printf("struct实例地址是%d
    ", sizeof(mycoach));
        system("pause");
    }

    •  引用作为函数的返回值
    #include"iostream"
    #include<string>
    using namespace std;
    
    int& getnum()
    {
        int a = 10;
        
        return a;
    }
    
    void main()
    {
        
        int &b = getnum();//返回内存空间,命名为b,函数运行完空间被释放掉,一些版本的编译器可能导致乱码,栈变量不能作为初始化返回值,可能带来问题!而静态变量和全局变量无此问题
        int c = getnum();//返回变量本身,副本
        printf("b的值是%d
    ",b);
        printf("c的值是%d
    ",c);
        system("pause");
    }

    输出结果:基于vs2013

    • 左值----函数在操作的左边---即给函数赋值
    #include"iostream"
    #include<string>
    using namespace std;
    
    int& getnum()
    {
        static int a = 10;
        a++;
        return a;
    }
    
    
    void main()
    {
        
        getnum() = 60;//这样一来,a的值由10变成了60
        int &c = getnum();
        printf("a的值是%d
    ", c);
        getnum() = 100;
        int &b=getnum();
        printf("a的值是%d
    ",b);
        system("pause");
    }

    输出结果:

  • 相关阅读:
    树:二叉树
    树:红黑树
    gtest
    VDB R&D
    QML 从入门到放弃
    json parse
    Effective C++ 笔记
    Samples topic
    C++ 11 snippets , 2
    C++ 11 snippets , 1
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/11937235.html
Copyright © 2020-2023  润新知