c 靜態變數問題,很奇怪

時間 2022-03-08 16:00:08

1樓:匿名使用者

其實,這裡主要是要搞清楚輸出的順序。

對於cout<來說,是從右往左依次把結果壓入緩衝區,最後再整體輸出出來。也就是說,

先計算add(j),此時結果為2,n=2,;再計算add(i),此時結果為3,n=3。

所以輸出的結果為3   2。

當執行cout<的時候,先計算add(i),此時結果為1,n=1;再計算add(j),此時結果為3,n=3;

所以輸出的結果為1   3。

如果在add中使用輸出n的話,也是根據第一種情況,則顯示2   3  。

把add中的結果顯示完後,再顯示整個語句的結果。

因此結果為 2   3    3   2。

2樓:匿名使用者

cout<

c++中這種表示式的運算順序是不確定的,不能保證 add(i) 先執行, add(j) 後執行 —— 事實上通常是相反的順序,即先呼叫 add(j) 後呼叫 add(i),但是可以確定的是只有呼叫過 add(i) 以後才能輸出 add(i) 的返回值,輸出 add(i) 的返回值以後才能輸出 add(j) 的返回值

這解釋很繞吧。避免這種麻煩的最好辦法就是不要寫這種**

3樓:草叢裡的落葉

你是分開來呼叫還是一起用的?

cout<

4樓:

我來回答:

cout << add(i) << add(j) << endl;——對於絕大多數編譯器,這個語句先計算add(j)壓棧,再計算add(i)壓棧。最後再後進先出從棧裡彈出來。那麼呼叫add(j)時使函式add中的靜態變數n變成了2,再呼叫add(i)時又使n變成了3。

輸出時先彈出3,再彈出2;這不就是輸出3 2嗎?有什麼奇怪?用cout << add(i);和cout<

解釋完畢,不知你是否已經明白了!

C語言關於迴圈中包含靜態變數,c語言for迴圈裡,static變數也能儲存值嗎?為什麼?

首先,要知道作用域的概念。c有 塊作用域,檔案作用域和函式原型作用域。詳細內容書裡面可以講一章,涉及到鏈結型別,作用域,儲存時期。這裡只說一點,你可能比較關心,看下面這個例子 include char a global void global void local int main global 將...

php中static靜態變數和普通變數的區別

愛笑的高大傻 php中static 靜態變數和普通變數的區別 在變數的前面加上static 就構成了靜態變數 static 變數 static變數和普通變數的區別在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限...

很奇怪的問題,乙個很奇怪的問題!

生活就是為了生存及發展的活動,活動是相對的。世界只存在你乙個人,你就是世界,世界也就是你,就好比只有物質的量,卻不存在相對變化的量,那生活是不成立的,亳無意義!同樣,時間已失去意義,剩下的就形同停止,同樣毫無意義!假如世界裡只剩下乙個人,已經沒有意義了,生活水平會下降到最基本的水平,社會是分工明確的...