一、解决方案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;
}