面试题答案
一键面试生命周期
- 概念:
static
局部变量的生命周期从程序开始执行到程序结束。它不像普通局部变量那样,在函数调用结束时就被销毁。即使函数调用结束,static
局部变量依然存在于内存中。 - 原因:
static
局部变量存储在静态存储区,而静态存储区的内存分配和释放是由程序启动和结束来控制的。
作用域
- 概念:
static
局部变量的作用域仍然局限于定义它的函数内部。它只能在该函数内被访问,其他函数无法直接访问这个static
局部变量。 - 与普通局部变量的区别:虽然普通局部变量作用域也在函数内,但普通局部变量在函数调用结束后就不存在了,而
static
局部变量可以在多次函数调用间保持其值。
与静态存储区的关系
- 存储位置:
static
局部变量存储在静态存储区。静态存储区用于存放全局变量和static
变量,其特点是在程序运行期间一直存在,不会随着函数调用和结束而频繁地分配和释放内存。 - 内存分配:在程序编译阶段,
static
局部变量就已经在静态存储区分配好了内存空间,并且只分配一次。
多次调用函数时static
局部变量值的变化
- 变化规律:
static
局部变量只会在第一次调用函数时初始化,之后每次调用函数,它都会保留上一次调用结束时的值。 - 代码示例:
#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。