ホームページ > バックエンド開発 > C++ > `2[arr]` が C および C で機能するのはなぜですか?

`2[arr]` が C および C で機能するのはなぜですか?

Susan Sarandon
リリース: 2024-11-26 13:56:09
オリジナル
792 人が閲覧しました

Why Does `2[arr]` Work in C and C  ?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート