MST

星途 面试题库

面试题:C++中static局部变量与静态存储区关系

阐述C++中static局部变量的生命周期、作用域以及它与静态存储区的关系。假设在一个函数中多次调用该函数,static局部变量的值会如何变化?请结合代码示例解释。
31.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

生命周期

  1. 概念static局部变量的生命周期从程序开始执行到程序结束。它不像普通局部变量那样,在函数调用结束时就被销毁。即使函数调用结束,static局部变量依然存在于内存中。
  2. 原因static局部变量存储在静态存储区,而静态存储区的内存分配和释放是由程序启动和结束来控制的。

作用域

  1. 概念static局部变量的作用域仍然局限于定义它的函数内部。它只能在该函数内被访问,其他函数无法直接访问这个static局部变量。
  2. 与普通局部变量的区别:虽然普通局部变量作用域也在函数内,但普通局部变量在函数调用结束后就不存在了,而static局部变量可以在多次函数调用间保持其值。

与静态存储区的关系

  1. 存储位置static局部变量存储在静态存储区。静态存储区用于存放全局变量和static变量,其特点是在程序运行期间一直存在,不会随着函数调用和结束而频繁地分配和释放内存。
  2. 内存分配:在程序编译阶段,static局部变量就已经在静态存储区分配好了内存空间,并且只分配一次。

多次调用函数时static局部变量值的变化

  1. 变化规律static局部变量只会在第一次调用函数时初始化,之后每次调用函数,它都会保留上一次调用结束时的值。
  2. 代码示例
#include <iostream>

void testFunction() {
    // 定义一个static局部变量
    static int staticVar = 0; 
    // 每次调用函数,staticVar的值加1
    staticVar++; 
    std::cout << "Static variable value: " << staticVar << std::endl; 
}

int main() {
    for (int i = 0; i < 5; i++) {
        testFunction();
    }
    return 0;
}

在上述代码中,testFunction函数内部定义了一个static局部变量staticVar,并初始化为0。每次调用testFunction函数,staticVar的值都会增加1,因为它保留了上一次调用结束时的值。运行main函数中的循环5次,每次调用testFunction函数,输出的staticVar值会依次为1、2、3、4、5。