C および C の Index[array] による配列へのアクセス
型破りな配列アクセス構文 2[arr] に関する古典的な面接の質問には、プログラマーの間で好奇心を引き起こしました。配列の 3 番目の要素に値を割り当てるこの構文は、配列名とインデックスの順序が逆転しているため、異常に見えます。
C/C 仕様によれば、この型破りなアプローチは確かに有効です。 。 C99 標準の 6.5.2.1 段落 1 では、[] 演算子の引数には「オブジェクト型へのポインタ」型の式と整数式が含まれることが明示的に記載されています。
さらに、段落 2 では、 [] 演算子は (*((E1) (E2))) と同じです。ここで、E1 は配列オブジェクト (またはその最初の要素へのポインタ) を表し、E2 は配列オブジェクトを表します。整数のインデックスを表します。この定義は演算子の機能の概要を示していますが、引数の順序に制限はありません。
これは、インデックスが配列名の前にある 2[arr] のような式が構文的に正しいことを意味します。有効で意味的に正しい。式は *(2 arr) として評価され、配列のベース アドレスに 2 が追加されます。その結果、配列の 3 番目の要素が正常にターゲット設定され、変更されます。
したがって、2[arr] の逆構文は単なるコンパイラのトリックではなく、C および C 言語の正当な機能であり、プログラマがアクセスできるようになります。従来とは異なる方法で、完全に機能する配列要素を作成します。
以上が`2[arr]` が C および C で機能するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。