MST

星途 面试题库

面试题:C++ 中局部静态变量的特性

在C++ 中,简述局部变量使用static关键字修饰后,其生命周期、作用域和初始化的特点分别是什么?请举例说明。
30.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

生命周期

使用 static 关键字修饰的局部变量,其生命周期从程序开始执行时分配内存,直到程序结束才释放内存,而不是像普通局部变量那样,在函数调用结束时就销毁。

作用域

作用域依然是定义该变量的函数内部,与普通局部变量作用域相同。即只能在定义它的函数内部访问,函数外部无法访问。

初始化

只会在第一次进入定义该变量的函数时进行初始化,后续再进入该函数时,不会再次初始化,而是使用上次函数调用结束时的值。

示例代码

#include <iostream>

void testFunction() {
    // 普通局部变量
    int normalVar = 1;
    // static修饰的局部变量
    static int staticVar = 1; 

    normalVar++;
    staticVar++;

    std::cout << "Normal Variable: " << normalVar << std::endl;
    std::cout << "Static Variable: " << staticVar << std::endl;
}

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

在上述代码中,testFunction 函数内定义了一个普通局部变量 normalVar 和一个 static 修饰的局部变量 staticVar。每次调用 testFunctionnormalVar 都会重新初始化为 1 然后自增,而 staticVar 只会在第一次调用 testFunction 时初始化为 1,后续调用不再初始化,直接在上次自增后的基础上继续自增。运行 main 函数中的循环,会清晰看到两者表现的差异。