MST

星途 面试题库

面试题:C++中静态局部变量的内存存储位置及特点

在C++中,静态局部变量存储在哪个内存区域?它与普通局部变量相比,在生命周期和作用域上有哪些不同?请举例说明。
50.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 静态局部变量存储的内存区域
    • 静态局部变量存储在静态存储区(也叫全局数据区)。
  2. 与普通局部变量在生命周期上的不同
    • 普通局部变量
      • 普通局部变量在进入其所在的函数或代码块时被创建,在离开该函数或代码块时被销毁。例如:
void test() {
    int localVar = 0; // 普通局部变量
    localVar++;
    std::cout << localVar << std::endl;
} // 函数结束,localVar被销毁
  • 静态局部变量
    • 静态局部变量在程序执行第一次遇到其定义语句时被创建并初始化,此后在程序的整个运行期间都存在,直到程序结束才被销毁。例如:
void test() {
    static int staticLocalVar = 0; // 静态局部变量
    staticLocalVar++;
    std::cout << staticLocalVar << std::endl;
}
  • 若多次调用test函数,普通局部变量每次进入函数都会重新初始化,而静态局部变量只会在第一次调用时初始化,后续调用保持上次修改的值。
  1. 与普通局部变量在作用域上的不同
    • 普通局部变量
      • 普通局部变量的作用域仅限于其定义所在的函数或代码块内部。
    • 静态局部变量
      • 静态局部变量的作用域同样仅限于其定义所在的函数或代码块内部。但与普通局部变量不同的是,它的生命周期不受限于作用域,即使多次离开和进入作用域,其值依然保持。例如:
int main() {
    for (int i = 0; i < 5; i++) {
        test();
    }
    return 0;
}

在上述代码中,test函数中的静态局部变量staticLocalVar在每次循环调用test时,其值都会累加,因为它一直存在于静态存储区,作用域虽然在test函数内,但生命周期贯穿整个程序运行。