zoukankan      html  css  js  c++  java
  • 函数返回值是引用(引用当左值)

    如果返回的是局部变量(栈上的) 引用,有可能会有问题

    #include <iostream>
    using namespace std;
    
    int getAA1(void)
    {
        int a;
        a = 10;
        return a;
    }
    
    //返回a的本身  返回a的一个副本 10
    int& getAA2(void)
    {
        int a;  //如果返回的是局部变量(栈上的) 引用,有可能会有问题
        a = 10;
        return a;
    }
    
    int* getAA3(void)
    {
        int a;
        a = 10;
        return &a;
    }
    
    int main(void)
    {
        int a1 = 0;
        int a2 = 0;
    
        a1 = getAA1();
    
        a2 = getAA2();
    
        int &a3 = getAA2();//若返回栈变量 不能成为其它引用的初始值
                            //a3是一个引用,相当于getAA2()函数中a的别名。
        //printf("a1:%d a2:%d a3:%d
    ", a1, a2, a3);
    
        printf("a1:%d 
    ", a1);
        printf("a2:%d 
    ", a2);
        printf("a3:%d 
    ", a3);  //a3引用的是一个局部变量,运行完已经不存在了。
    
        return 0;
    }

    运行结果:

    
    

    int j(void)
    {
        static int a = 10;
        a++;
        return a;
    }
    
    int& j1(void)
    {
        static int a = 10;
        a++;
        return a;
    }
    //若返回静态变量或全局变量
    // 可以成为其他引用的初始值
    // 即可作为右值使用,也可作为左值使用
    int main(void)
    {
        int a1 = 10;
        int a2 = 20;
    
        a1 = j();
        a2 = j1();
        int &a3 = j1();
    
        printf("a1:%d 
    ", a1);
        printf("a2:%d 
    ", a2);
        printf("a3:%d 
    ", a3);  
    
        return 0;
    }

    运行结果:

      函数返回值当左值。

    //函数当左值
    //返回变量的值
    int g1(void)
    {
        static int a = 10;
        a++;
        return a;  //11
    }
    //返回变量自身, 返回变量标识的内存空间
    int& g2(void)
    {
        static int a = 10;
        a++;
        printf("a:%d 
    ", a);
    
        return a; 
    }
    
    int main(void)
    {
        //g1() = 100;  11=100
        g2() = 100; //函数返回值是一个引用,当左值。
        g2();
    
        int c1 = g1();  //函数返回值是一个值,当右值
        int c2 = g2(); //函数返回值是一个引用,当右值。
        
        printf("c1:%d 
    ", c1);
        printf("c2:%d 
    ", c2);
    
        return 0;
    }

    运行结果:

  • 相关阅读:
    BZOJ3674:可持久化并查集加强版
    BZOJ3772:精神污染
    BZOJ3932:[CQOI2015]任务查询系统
    BZOJ3123:[SDOI2013]森林
    BZOJ1926:[SDOI2010]粟粟的书架
    029 列表类型内置方法
    02 Python爬虫之盗亦有道
    01 Python爬虫之Requests库入门
    028 字符串类型内置方法
    027 数字类型内置方法
  • 原文地址:https://www.cnblogs.com/Liu-Jing/p/9646842.html
Copyright © 2011-2022 走看看