面试题答案
一键面试- 静态局部变量存储的内存区域:
- 静态局部变量存储在静态存储区(也叫全局数据区)。
- 与普通局部变量在生命周期上的不同:
- 普通局部变量:
- 普通局部变量在进入其所在的函数或代码块时被创建,在离开该函数或代码块时被销毁。例如:
- 普通局部变量:
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
函数,普通局部变量每次进入函数都会重新初始化,而静态局部变量只会在第一次调用时初始化,后续调用保持上次修改的值。
- 与普通局部变量在作用域上的不同:
- 普通局部变量:
- 普通局部变量的作用域仅限于其定义所在的函数或代码块内部。
- 静态局部变量:
- 静态局部变量的作用域同样仅限于其定义所在的函数或代码块内部。但与普通局部变量不同的是,它的生命周期不受限于作用域,即使多次离开和进入作用域,其值依然保持。例如:
- 普通局部变量:
int main() {
for (int i = 0; i < 5; i++) {
test();
}
return 0;
}
在上述代码中,test
函数中的静态局部变量staticLocalVar
在每次循环调用test
时,其值都会累加,因为它一直存在于静态存储区,作用域虽然在test
函数内,但生命周期贯穿整个程序运行。