看板 C_and_CPP 關於我們 聯絡資訊
這邊很適合跟 while 迴圈一起做討論, int i = 0; for( i; i < 1; ++i ) { std::cout<<i<<"\n";//這邊是迴圈裡。 } std::cout<<i<<"\n";//這邊是迴圈外。 關於執行順序倒也不用背, 試著寫出和它效力相等的 while 迴圈, 一切就會明朗許多 int i = 0; // 開始新的 scope, 所以可以定義同名的變數來遮蓋 // 外面的 { i; // 這行跟沒寫一樣 while( i < 1 ) { // 以下是 for 迴圈的本體 std::cout<<i<<"\n";//這邊是迴圈裡。 // 以上是 for 迴圈的本體 ++i; } } // 結束新的 scope, 迴圈內定義的變數都不能使用 std::cout<<i<<"\n";//這邊是迴圈外。 想像這些掉換程式碼順序的動作編譯器會幫你完成, for 的 語法可以讓這些步進的程式碼聚集在一起, 不像 while般凌 亂, 試著執行這個等價的 while迴圈, 你就可以知道值的變 化. -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢█歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (10/28 22:46)
ZCH:我比較擔心你寫while後順序差更多~反而讓他想半天.... 10/28 22:47
mabus:i的變化,在loop結束之後,其變化依舊是存在的,對嗎? 10/28 22:56
mabus:原本以為,迴圈結束之後,在迴圈外時,i又會變初始狀態了。 10/28 22:57
loveflames:樓上說的是在迴圈裡宣告的那種 10/28 23:00
在迴圈裡定義的那種是屬於新的 scope裡的東西, 跟最 前面的 i 無關 不過VC6來說, 如果寫成這樣 : for( int i = 0; i < 10; ++i ) ; int i = 2; // 再次定義 i 編譯器會報錯, 原因是對他而言, 這樣的寫法跟下面的 for 是一樣的 : int i = 0; for( ; i < 10; ++i ) ; int i = 2; // 再次定義 i 容易讓人混淆...
mabus:是建立一個迴圈,就有一個新的獨立的scope嗎? 10/28 23:07
VictorTom:應該是每一個 {} 裡. 另外, 一般來說, 程式不會自己跑出 10/28 23:10
VictorTom:你沒有寫code的東西來, 所以除非你在什麼地方讓i設成初 10/28 23:11
VictorTom:始值, 沒有哪個變數會自動變初始狀態@_@" 10/28 23:11
VictorTom:如果不考慮C++ ctor/dtor/ooxx的feature和隱式轉型的話. 10/28 23:12
loveflames:C89能不能在迴圈裡宣告? 10/28 23:14
loveflames:我應該說定義 10/28 23:14
不能在 for header裡定義, 但是可以在 body 裡定義
loveflames:C99以後才有? 10/28 23:15
我手上只有 C99的規格書, 也不太清楚是從什麼時候才 有, 不過 gcc是這樣告訴我的 : 'for' loop initial declarations are only allowed in C99 mode
nowar100:是C99開始有沒錯 不過之前各家編譯器就有實作 10/28 23:22
loveflames:因為C++先有這功能? 10/28 23:29
我對 C 語言不熟, 有請板大...Orz p 大好神! ※ 編輯: loveme00835 來自: 140.121.197.115 (10/28 23:36)
VictorTom:推p大好神Orz 10/28 23:37
purpose:我覺得做這份網頁的人很佛心,省了大家很多時間 10/28 23:47
loveflames:我只知道其中幾個而已..orz 10/28 23:56
goldie:推p大好神 m(_ _)m 10/29 11:50
tomap41017:這網頁太棒了! 10/29 20:44
a60301:真的是大推~~~~~ 10/30 22:16