C语言函数中的静态变量:[副本]

hivapdat  于 2023-01-25  发布在  其他
关注(0)|答案(3)|浏览(144)
    • 此问题在此处已有答案**:

What does "static" mean in C?(20个答案)
23分钟前就关门了。
我有一个带静态变量的C函数:

void plus_five() {
    static int i = 10;
    i += 10;
    printf("%d", i);
}

int main() {
    for(int i = 0;i < 10;i++) {
        plus_five();
    }
    return 0;
}

我得到这个输出:十二十三十四十五十六十七十八十九十一百
为什么每次执行函数时,即使变量被设置为10,变量也会递增?

kokeuurv

kokeuurv1#

在函数内部声明为static的变量在程序启动时初始化 * 一次 *,并在连续的函数调用中保持其值。
这意味着第一次调用plus_five时,i的值将为10,函数会将该值增加到20。在下一次调用时,i保留其值20,并增加到30,依此类推。

7vhp5slm

7vhp5slm2#

为什么每次执行函数时,即使变量被设置为10,变量也会递增?
因为你把它标记为static,这意味着(在这个上下文中)你想让变量在程序的整个生命周期中持续存在,变量只初始化一次,从那以后它保持你给予它的任何值。
可以将静态变量视为全局变量,它只能在声明它的函数内部可见。

xwmevbvl

xwmevbvl3#

  • '为什么每次执行函数时,即使变量设置为10,变量也会递增?'* 是一个错误的问题。

变量实际上是递增的。它是由于i += 10表达式而递增的,并且它不依赖于是否在每次执行函数时被设置为10。
现在真正的问题不是 '变量是否/为什么是/不是递增的' 而是 '为什么变量不是在每次执行函数时都重新初始化为10?'
答案是:因为关键字static就是这个意思变量仅初始化一次,并且在对函数的调用之间保持其值。

相关问题