20.返回函数中静态变量的地址会发生什么-灵析社区

菜鸟码转

C++

#include <iostream>
using namespace std;

int * fun(int tmp){
    static int var = 10;
    var *= tmp;
    return &var;
}

int main() {
    cout << *fun(5) << endl;
    return 0;
}

/*
运行结果:
50
*/
  • 前面的章节中讲过,静态局部变量存在静态区,程序初始化时则已经创建了改变量,变量的生存周期为整个程序的生命周期。上述代码中在函数 fun 中定义了静态局部变量 var,使得离开该函数的作用域后,该变量不会销毁,返回到主函数中,该变量依然存在,从而使程序得到正确的运行结果,该静态局部变量直到程序运行结束后才销毁。
  • 需要注意的是,全局静态对象在程序初始化时,则进行了初始化。局部静态对象的初始化在第一次进入函数内部时,才会调用对象的构造函数进行初始化。程序退出时,先释放静态局部变量,再释放全局静态变量。

阅读量:1590

点赞量:0

收藏量:0