C および C の Index[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 中国語 Web サイトの他の関連記事を参照してください。