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表示這是一個不能修改值得常量等等。變數 是一個能夠存放某個指定型別...