`index[array]` は C および C の有効な配列アクセス構文ですか?

Susan Sarandon
リリース: 2024-11-24 21:55:18
オリジナル
262 人が閲覧しました

Is `index[array]` a Valid Array Access Syntax in C and C  ?

C および C の Index[array] による配列へのアクセス

配列のインデックス付けの一般的な形式は array[index] ですが、C および C では代替構文が提供されています。インデックス[配列]。この構文は多くのプログラマーを困惑させてきましたが、言語仕様では有効ですか?

質問:

int arr[] = {1, 2, 3};
2[arr] = 5; // Does this compile?
assert(arr[2] == 5); // Does this assertion fail?
ログイン後にコピー

説明:

このひっかけ質問は、次の可換的な性質に依存しています。追加。演算 Index[array] は *(index array) に変換され、加算は可換であるため、2[arr] と arr[2] は同等であると想定できます。ただし、これは言語仕様に明示的に記載されていません。

回答:

はい、コードは C および C 仕様に従って有効です。

C99 (6.5.2.1、段落1):

One of the expressions shall have type "pointer to object type", the other expression shall have integer type, and the result has type "type".
ログイン後にコピー

C99 (6.5.2.1、段落 2):

A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).
ログイン後にコピー

これらの仕様では引数の順序は必要ありません正気になるために[]に。したがって、コード内の両方の行が期待どおりにコンパイルおよび実行され、アサーションが成功します。

以上が`index[array]` は C および C の有効な配列アクセス構文ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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