ホームページ >バックエンド開発 >C++ >`2[arr]` は C および C : 可換配列アクセスの `arr[2]` と等しくなりますか?

`2[arr]` は C および C : 可換配列アクセスの `arr[2]` と等しくなりますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-25 14:42:11795ブラウズ

Does `2[arr]` Equal `arr[2]` in C and C  : A Commutative Array Access?

C および C のインデックス [配列] による配列へのアクセス : 可換的好奇心

面接官を困惑させる謎めいた質問:

int arr[] = {1, 2, 3};
2[arr] = 5; // Compiles?
assert(arr[2] == 5); // Fails?

直感的には、a[b] は翻訳されると思われます

標準はこれを裏付けていますか?

実際、C および C 標準はこの動作を承認しています。

C 標準(C99):

セクション 6.5.2.1、段落 1:

式の 1 つは「オブジェクト型へのポインター」型を持ち、もう 1 つの式は整数型を持つものとします。結果の型は "type" です。

段落 2 (強調)追加):

角括弧 [] で囲まれた式が後に続く後置式は、配列オブジェクトの要素の添字付きの指定です。 添字演算子 [] の定義は、E1[E2] が (*((E1) (E2))) と同一であることです。二項演算子に適用される変換規則により、E1 が配列オブジェクト (配列オブジェクトの最初の要素へのポインタと同等) で、E2 が整数の場合、E1[E2] は E1 の E2 番目の要素を指定します。 (ゼロから数えます)。

結論

この規格では明確に次のように述べられています。 E1[E2] は、引数の順序に関係なく、*(E1 E2) と同等です。したがって、2[arr] は arr[2] と同じ結果を返し、代入とアサーションの両方が眉をひそめることなく成功します。

以上が`2[arr]` は C および C : 可換配列アクセスの `arr[2]` と等しくなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。