📜  C++ |静态关键字|问题1(1)

📅  最后修改于: 2023-12-03 15:13:58.404000             🧑  作者: Mango

C++ 静态关键字问题1

静态关键字在 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
结论

本题考察静态变量的使用,程序的输出结果与静态变量的值以及其作用域有关。理解并正确使用静态关键字有助于我们写出更加高效的程序。