i, j, k, m, n 等單字母<,非常規條件(<=/>)必須註釋說明
int array[ROW][COL];
for (int i = 0; i < ROW; i++) { // 外層:行
for (int j = 0; j < COL; j++) { // 內層:列(連續內存)
process(array[i][j]);
}
}
原理:C語言按行主序存儲,array[i][j] 與 array[i][j+1] 地址相鄰。內層遍歷列利用CPU緩存行預取,訪問效率最高。
如1000個坐標點,原定義 int pos[1000][2] 需雙層循環。優化為:
// 定義
int pos[1000][2]; // [0]=x, [1]=y
// 單層遍歷
for (int i = 0; i < 1000; i++) {
int x = pos[i][0];
int y = pos[i][1];
process(x, y);
}
收益:消除內層循環開銷(條件判斷、跳轉、計數器更新),CPU流水線更友好,代碼更簡潔。
typedef struct { int x, y; } Point;
Point points[1000];
for (int i = 0; i < 1000; i++) {
process(points[i].x, points[i].y);
}
語義更清晰,擴展屬性(如z、color)無需改動循環結構。
循環遍歷看似基礎,實則蘊含內存訪問模式優化與代碼可維護性雙重考量。掌握「內層走連續內存、小固定維度攤平、語義化用結構體」三大技法,寫出高效優雅的C代碼。