C/C++面试:37---如何让局部变量具有全局生命周期?

一、解决方案1

  • 使用将局部变量定义为static的,这样这个变量就具有全局的生命周期了(但是必须执行到定义它的那一行之后才开始具有全局生命周期)
  • staic局部变量虽然具有全局的生命周期,但是仍然只能在局部作用域被访问和使用
void func()
{

    // 执行到这一行之后, num就具有全局生命周期了, 但是只能在func()函数内使用
    // 当第二次执行到这里时, num已经被定义了, 不会再次定义
    static int num = 10;

}

int main()
{

}

二、解决方案2

  • 可以利用动态内存来实现,C++用new操作符
  • 具体细节为:
    • 我们在函数内new一个动态内存变量,然后将其传出函数
    • 然后用一个全局指针接收这个返回值,这样我们就可以在全局使用这个动态变量了
    • 但是需要注意的是,使用完成之后记得释放这个变量
  • 为什么不能用C语言来调用malloc实现,因为C语言不允许在全局调用函数,但是C++允许在全局调用函数。题目的要求是全局声明周期,因此需要使用C++
  • 代码演示:
#include <iostream>

using namespace std;

// 返回一个动态内存指针
int * func()
{
    int *p = new int(4);
    return p;
}

// 定义全局指针接收(C++允许在全局定义函数)
int *p = func();

int main()
{
    std::cout << "main: *p:"<< *p << std::endl;

    // 使用完成之后记得释放
    free(p);

    return 0;
}

 

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/107738574