zoukankan      html  css  js  c++  java
  • c++函数返回局部变量

    char* func()  
    {  
        char arr[] = "Hello,World
    "; // arr[] 全部元素保存在栈内存上 
        return arr;  // 返回局部变量或暂时变量的地址  
        /*即返回了指向栈内存的指针。而返回后栈内存都会被自己主动回收,main里面接收到的地址指向的内存已经不存在。变为野指针 */
    }  
    int main()  
    {  
        printf("%s", func());  // 打印出垃圾数据。也可能打印出 "Hello,World,取决于编译器对栈内存回收的处理方法  
        return 0;  
    }  

    改进方法例如以下:

    char* func()  
    {  
        char *arr = "Hello,World
    ";    // "Hello,World
    " 保存在仅仅读常量区,非栈内存不受函数返回影响  
        return arr;   // 事实上返回的是 arr 的副本。返回后 arr 变量也销毁。可是其指向常量区不受影响  
    }  
    int main()  
    {  
        printf("%s", func());   // 能打印出 Hello,World  
        getchar();  
        return 0;  
    }
    char* func()  
    {  
        static char arr[] = "Hello,World
    ";    // "Hello,World
    " 保存在静态存储区。非栈内存不受函数返回影响。  
        return arr;  //返回指向静态存储区的指针  
    }  
    int main()  
    {  
        printf("%s", func());   // 能打印出 Hello,World  
        return 0;  
    }  
    
  • 相关阅读:
    顺序容器的操作
    C++顺序容器
    Java8实战系列一
    Java枚举的小知识点
    Java集合框架入门介绍(一)
    测试代码格式
    Eclipse通过jdbc连接sqlserver2008数据库的两种方式
    排序算法之插入排序
    排序算法之冒泡排序
    容器扩容之分摊时间复杂度分析
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7353350.html
Copyright © 2011-2022 走看看