簡體   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