MST

星途 面试题库

面试题:C++中全局变量和局部变量生命周期的基础差异

请详细阐述C++中全局变量和局部变量生命周期在常规情况下的不同,并举例说明在一个简单的函数调用场景下,全局变量和局部变量是如何遵循各自生命周期规则的。
10.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

全局变量和局部变量生命周期的不同

  1. 全局变量
    • 生命周期从程序启动开始,到程序结束时结束。全局变量在程序加载到内存时就分配空间并初始化(如果有初始化的话),在整个程序运行期间一直存在于内存中,直到程序终止才会被释放。
  2. 局部变量
    • 生命周期从变量声明处开始,到包含该变量声明的块结束时结束。当进入局部变量所在的代码块(如函数体、循环体等)时,为局部变量分配内存空间并初始化(如果有初始化的话),当离开这个代码块时,局部变量的内存空间被释放。

简单函数调用场景下的示例

#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