面试题答案
一键面试全局变量和局部变量生命周期的不同
- 全局变量:
- 生命周期从程序启动开始,到程序结束时结束。全局变量在程序加载到内存时就分配空间并初始化(如果有初始化的话),在整个程序运行期间一直存在于内存中,直到程序终止才会被释放。
- 局部变量:
- 生命周期从变量声明处开始,到包含该变量声明的块结束时结束。当进入局部变量所在的代码块(如函数体、循环体等)时,为局部变量分配内存空间并初始化(如果有初始化的话),当离开这个代码块时,局部变量的内存空间被释放。
简单函数调用场景下的示例
#include <iostream>
// 全局变量
int globalVar = 10;
void func() {
// 局部变量
int localVar = 20;
std::cout << "Inside func: globalVar = " << globalVar << ", localVar = " << localVar << std::endl;
}
int main() {
std::cout << "Before func call: globalVar = " << globalVar << std::endl;
func();
// 这里localVar已经超出其作用域,无法访问
std::cout << "After func call: globalVar = " << globalVar << std::endl;
return 0;
}
在上述代码中:
- 全局变量
globalVar
:在程序启动时就已初始化并存在于内存中。在main
函数调用func
函数前后,globalVar
都可以正常访问且值保持不变,直到程序结束才会被释放。 - 局部变量
localVar
:在func
函数内部声明时被初始化,当func
函数执行结束,localVar
的生命周期结束,内存被释放。在main
函数中离开func
函数后,无法再访问localVar
。