当前位置:   article > 正文

【C++】C++ 引用详解 ④ ( 函数返回 静态变量 / 全局变量 的 引用 / 指针 )_.c++中引用类型的函数返回局部变量

.c++中引用类型的函数返回局部变量





一、函数返回 静态变量 / 全局变量 的 引用 / 指针




1、函数返回局部变量引用或指针无意义


上一篇博客 【C++】C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用或指针 | 函数内的 “ 局部变量 “ 的引用或指针做函数返回值无意义 ) 得出如下结论 :

函数的返回值 是 “ 局部变量 “ 的 引用 或 指针 时 , 是无意义的 ;

函数 执行完毕后 , 该 函数对应的 栈内存 会被回收 , 相应的 局部变量 地址 也有没有了意义 ,

此时 , 再持有一个 函数返回的 没有意义的 引用 / 指针 , 取出的值是随机无意义的值 ;


2、函数返回静态变量/全局变量的引用或指针


函数 返回的是 " 静态变量 " 或 " 全局变量 " 的 引用 / 指针 时 , 是可以的 ;


如果 函数 的 返回值 是 静态变量 或 全局变量 的引用 ,

这两种变量 一旦分配内存后 , 在整个程序的生命周期中 , 该内存都不会被回收 ,

返回它们的 引用 / 指针 , 可以正常访问 对应 内存中的数据 ;


3、代码示例 - 函数返回静态变量/全局变量的引用或指针


在下面的代码中 ,

fun 函数作为 参照 , 返回普通的 静态变量 ;

fun2 函数 返回 静态变量 的引用 ;

上述两个函数的 静态变量 的生命周期 都是 与 程序生命周期相同的 , 只有程序结束时 , 这两个 静态变量的内存才会被回收 ;

使用 引用 接收 fun2 函数返回的引用 , 获取的是静态变量的引用地址 , 该引用对应的内存一直是有效的 , 因此可以通过该引用获取到内存中正确的 静态变量值 ;


代码示例 :

// 导入标准 io 流头文件
// 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

#include <stdio.h>

// 返回静态变量
int fun()
{
    static int a = 10;
    return a;
}

// 返回引用
int& fun2()
{
    static int a = 20;
    return a;
}

int main() {

    // 使用普通变量接收变量返回值
    int a1 = fun();

    // 使用普通变量接收引用返回值
    int a2 = fun2();

    // 使用引用接收 引用返回值
    int& a3 = fun2();

    // 混淆栈内存选项
    int a4 = fun();

    // 打印上述返回结果
    printf("a1 = %d , a2 = %d , a3 = %d , a4 = %d\n", a1, a2, a3, a4);

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

执行结果 :

a1 = 10 , a2 = 20 , a3 = 20 , a4 = 10

Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Debug\HelloWorld.exe (进程 13496)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码世界探险家/article/detail/63277
推荐阅读
相关标签
  

闽ICP备14008679号