剛在看Progressive Radiosity by Eric Chen while he worked for Apple的程式碼,看到它用了還滿特殊的for loop,一開始還以為他寫錯,後來想想,執行過後並沒有發生記憶體存取錯誤的警告訊息,隨後自己寫了程式來測試……
直接來看程式碼吧~
/**
Theme: For loop
Compiler: Dev C++ 4.9.9.2
Date: 100/05/10
Author: ShengWen
Blog: https://cg2010studio.wordpress.com/
*/
#include<iostream>
using namespace std;
int main(){
int number[10]={1,2,3,4,5,6,7};
for(int i=10;i--;){
cout<<i<<':';
cout<<number[i]<<endl;
}
system("pause");
return EXIT_SUCCESS;
}
如果是一般人的話,你會怎麼寫呢?當然就是把for那一行改成:
for(int i=10-1;i>=0;i–)
這樣子跑出來的結果一模一樣!
9:0
8:0
7:0
6:7
5:6
4:5
3:4
2:3
1:2
0:1
請按任意鍵繼續 . . .
道理是因為i初始化為10後,會隨即執行i–,比較i是否為0,接著i變為9,就可以無誤地存取number陣列[9]。最後一回合的i為1,接著執行i–,比較i是否為0,因為是i–而非–i,所以i在此時依然是1,接著i變為0,存取number陣列[0]。
隨意留個言吧:)~