📅  最后修改于: 2023-12-03 15:13:58.404000             🧑  作者: Mango
静态关键字在 C++ 中既可以用于静态变量、静态成员函数、静态成员变量,也可以用于静态类。静态关键字经常会出现在面试题目中,下面我们就来详细讲解一下静态关键字的问题1。
请问下面的程序输出结果是什么?
#include <iostream>
using namespace std;
void fun(int n) {
static int x = 0;
if (n > 0) {
fun(n - 1);
x++;
cout << x << endl;
fun(n - 1);
}
}
int main() {
fun(3);
return 0;
}
这道题目的难点在于静态变量的使用。
在函数内部使用 static
关键字定义的变量,相当于定义了全局变量,但其作用域只在函数内部有效,而且只会被初始化一次。也就是说,在第一次调用时执行 static int x = 0;
,以后每次调用函数时都会从 x
的上一次值开始累加,而不是从0开始。因此第一次调用 fun
函数时,x
被初始化为0,程序输出为1;第二次调用 fun
函数时,x
被上一次调用的结果累加为1,程序输出为2;第三次调用 fun
函数时,x
被上一次调用的结果累加为3,程序输出为4;第四次调用 fun
函数时,x
被上一次调用的结果累加为7,程序输出为8;依次类推输出结果为:
1
2
1
3
1
2
1
4
1
2
1
3
1
2
本题考察静态变量的使用,程序的输出结果与静态变量的值以及其作用域有关。理解并正确使用静态关键字有助于我们写出更加高效的程序。