C 標準 (C99 §6.5.2.1) 明確定義:
a[b] ≡ *(a + b)
因此:
a[5] ≡ *(a + 5) 5[a] ≡ *(5 + a) *(a+5) ≡ *(5+a) // 加法交換律
a:陣列首元素位址 (指標常量)a + i:位址偏移 i * sizeof(*a) bytes*(a + i):解參考存取該位址資料a+i ≡ i+a,故 a[i] ≡ i[a]#includeint main() { int a[10] = {9, 2, 3, 4, 7, 6, 5, 8, 1, 10}; printf("a[5] = %d\n", a[5]); // 6 printf("*(a+5) = %d\n", *(a+5)); // 6 printf("*(5+a) = %d\n", *(5+a)); // 6 printf("5[a] = %d\n", 5[a]); // 6 // 進階驗證:指標變數同樣適用 int *p = a; printf("p[3] = %d\n", p[3]); // 4 printf("3[p] = %d\n", 3[p]); // 4 return 0; }

| 場景 | 建議 | 理由 |
|---|---|---|
| 正常程式碼 | 嚴禁使用 i[a] | 嚴重降低可讀性,違反最小驚訝原則 |
| IOCCC/混淆代碼 | 可作為技巧展示 | 展示 C 語言語法靈活性 |
| 編譯器測試 | 驗證標準合規性 | 確保編譯器正確實作下標運算子語意 |
| 教學示範 | 說明指標算術本質 | 幫助理解 a[i] 語法糖本質 |