繁体   English   中英

通过多个函数调用初始化局部静态变量

[英]Initialization of a local static variable throught multiple function calls

int f(int &g){
    static int a=g;
    a+=1;
    return a;
}

int main()
{
    int g=0;
    int a=f(g);
    g=10;
    a=f(g);
    cout<<a;
    return 0;
}

上面的代码给出了输出 2。我的猜测是它应该是 11。

我确实明白 main 函数中的a与 f 函数中的 a 不同。 所以当g=0 ,a in f 将是 1,我相信。 然后当g=10 ,它应该是 11,在 main 中给出a=11 为什么不是这样? 谢谢!

您在这里误解了static关键字。 当一个局部变量被声明为static ,它会被初始化一次。 在函数内部,这是第一次调用 then 函数的时间。 你首先调用这个函数

int g=0;
int a=f(g);

因此, f内部的局部变量a被初始化为零,然后递增。 稍后,你第二次调用f

g=10;
a=f(g);

但由于局部变量已经初始化,它不会被覆盖。 相反,发生第二次增量,结果为2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM