C 變數定義問題請教高人

2023-01-26 11:30:30 字數 2144 閱讀 2489

1樓:匿名使用者

樓上的幾個說的都比較接近了。不過都不正確。

其實按照c++的標準的話whlie迴圈就是判斷加跳轉指令組合的結果而已,whlie迴圈體內的臨時變數到了迴圈結束的時候是會被**的。不過目前大多數的編譯器為了提高**的執行效率,事實上是對**作了優化的。就好像我們寫for(int i = 0;i < 10;i++) 與 for(int i = 0;i < 10;++i) 的實際效果在大多數編譯器上的效果一樣是一個道理。

別小看編譯器,現代的編譯器已經不只是編譯而已了,**優化也是重要的一部分了。

所以在while迴圈的臨時變數的定義會被編譯器重新等價轉換掉。如果有人不相信的話可以去找很老的c語言的編譯器來試試我樓上所說的測試,你會看到記憶體地址是變化的。

順便說一下,樓上所用的方法測試其實並不夠準確,如果對待的是自定義的型別的話,while迴圈裡面編譯器就不會對其進行優化了,可以用下例證明!

#include

class a

~a()

};void main()

} 你會看到螢幕顯示100個"a delete!",這就說明每當迴圈到尾時,a變數很被析構。同時看到100個"a setup"在"enter:

"後面出現。如果照以上的說法,只析構一次的話,應該只會有一個"a delete!"出現的。

你還會還看打出的a的地址是不會變的。所以說樓上的測試方法不準確。

2樓:

和for迴圈裡的一樣,每次順序執行完一遍**後,再重新判斷條件是否滿足前失效.即在while迴圈一遍後自動失效

如while(表示式)

中,除了第一次外,每次在判斷表示式為true或false前i就失效了;如果表示式為true,則相當於又重新定義了一個int型的變數i.

3樓:

每迴圈一次就失效

過程:開始執行

宣告變數

執行其他**

變數失效

返回再次執行(迴圈)

4樓:小玉是我老婆

while 裡定義的i只在while迴圈裡有用,在這裡面隱藏外部定義的i.

5樓:匿名使用者

"int i = 0;"在while迴圈裡只宣告一次,然後就在整個while迴圈裡有效,當退出這個while迴圈時,變數i將自動被系統**.

補充:剛才特意測試了一下...

while(1)

發現,i的地址不變,但i的值一直為1,並且迴圈不會退出,說明i只是不斷重新宣告並在原地址分配記憶體.樓上幾位是對的.

是我錯了,我道歉....

汗,...

再次補充:

突然想到,上面的產生上面結果的原因也可能只是因為"每次執行i=0,但並未重新定義i". 剛才再次測試了一下,

int j=0;

while(j<10)

if((j++)%2)else

}結果是:

1 z=e2fd80,i2=e2fd84

2 k=e2fd8c, i1=e2fd88

3 z=e2fd80,i2=e2fd84

4 k=e2fd8c, i1=e2fd88

5 z=e2fd80,i2=e2fd84

6 k=e2fd8c, i1=e2fd88

...說明第1次先分配記憶體的是z和i2,然後第2次再分配k和i1,

按照樓上幾位的說法,在結束第1次迴圈時,z和i2已經失效,則第2次迴圈開始時,分配給k和i1的記憶體應該就是第1次迴圈時z和i2的地址才對,但這裡卻有4個不同的地址分配給了k,i1,z,i2, 這就說明第1次迴圈結束後,z和i2並沒有被清除,而是被以後的迴圈中繼續使用,

也就是說,在整個while迴圈裡,這4個變數的地址一直沒有變動過,

這說明這些變數在while迴圈裡的if區域裡,宣告的變數並未消失,只要再次進入這個區域,原先被宣告變數就馬上起效,而不需要重新分配記憶體了,這樣的話,對於,每次迴圈變數都被重新定義這個說法就有點站不住了...

最後的補充:

beddy1 是對的,他的測試方法一針見血,佩服佩服!

6樓:

while迴圈一遍後自動失效

7樓:帳號已登出

while迴圈一遍後自動失效

i 的有效期為定義行到 }

VB定義變數的問題,vb定義變數的問題

這屬於結構體變數,你可以使用變數的元素,例如 可以呼叫 abc.name 也可以給它賦值,或者abc.class 總之就是類似與陣列元素,你可以使用其中的元素,但不能用一個整體來使用,但定義的時候可以整體定義,例如 dimabc asstudent,定義了abc 那麼abc就自動包含了2個元素,一個...

c 與java定義變數的區別,C 與Java都是物件導向,有什麼區別嗎?

c是一個結構化語言,如e68a84e8a2ad62616964757a686964616f31333332636363 譚老爺子所說 它的重點在於演算法和資料結構。c程式的設計首要考慮的是如何通過一個過程,對輸入 或環境條件 進行運算處理得到輸出 或實現過程 事務 控制 而對於c 首要考慮的是如何構...

c語言中變數定義是什麼,c語言中exit怎麼定義?

型別說明符 變數名稱 賦值表示式。這是基本的。比如 int a 1 2 char b b 定義了一個整數型變數a 其值為1 2就是3,定義了一個字元型變數b,b的值為字元 b 型別說明符變數名稱還可以加修飾說明,比如前面加上const表示這是一個不能修改值得常量等等。變數 是一個能夠存放某個指定型別...