在C 和C 語言中透過索引[array]存取陣列
在面試官有時提出的知識測驗中,出現以下程式碼:
int arr[] = {1, 2, 3}; 2[arr] = 5; // does this line compile? assert(arr[2] == 5); // does this assertion fail?
表達式2[arr]最初可能會編譯失敗,因為它似乎正在嘗試使用整數作為數組名稱來索引數組。然而,這種意想不到的語法在 C 和 C 中確實有效。
要理解原因,讓我們深入研究這些語言中 [] 運算子的技術細節。
C 和 C數組訪問語義
根據 C99 標準(6.5.2.1 第 1 段), []運算子需要以下形式的參數:
此外,同一節的第2段解釋了E1[E2]相當於(*((E1)(E2)))。這表示表達式 E1[E2] 可以解釋為指標運算:
至關重要的是,標準中沒有要求 [] 的參數順序保持合理。因此,表達式 2[arr] 被視為等價於 (*((2) (arr)))。
因此,賦值和後續斷言都成功,如預期。
以上是2[arr] = 5 是否在 C 和 C 中編譯並通過斷言?的詳細內容。更多資訊請關注PHP中文網其他相關文章!