ホームページ >バックエンド開発 >C++ >サブスクリプションによる C 配列の末尾 1 つ後のアドレスの取得は合法ですか?

サブスクリプションによる C 配列の末尾 1 つ後のアドレスの取得は合法ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 11:07:10956ブラウズ

Is Obtaining the Address One Past the End of a C   Array via Subscripting Legal?

最後尾の 1 つ前の配列アドレス取得の正当性の問い合わせ

質問

C では、配列要素のアドレスを取得できますか次のコードに示すように、末尾の 1 つ先は添え字を使用して取得します。スニペット?

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];

具体的には、&array[5] は C 標準に準拠していますか?

答え

はい、コードは C 標準に準拠しています。

説明

C99原稿による標準:

§6.5.2.1、段落 2:

角括弧 [] で囲まれた式が続く後置式は、配列の要素を添字で指定します。オブジェクト。

§6.5.3.2、段落3:

[& 演算子の] オペランドが [] 演算子の結果である場合、& 演算子も、[] によって暗示される単項 * も評価されず、結果は& 演算子が削除され、[] 演算子が演算子に変更されたかのように。

§6.5.6、段落8:

式 P が配列オブジェクトの最後の要素を指す場合、式 (P) 1 は配列オブジェクトの最後の要素の 1 つ先を指します。

に基づくこれらの抜粋:

  • & 演算子はポインタのアドレスを生成します。オペランド。
  • [] 演算子の結果に適用すると、& 演算子が削除され、[] 演算子が演算子になります。
  • 配列の最後の要素を指す式

したがって、式 &array[5] は *(配列 5) と同等であり、これは配列を指します。配列の最後の要素の 1 つ先。これは、ポインタが逆参照されない限り、標準に従って合法です。

以上がサブスクリプションによる C 配列の末尾 1 つ後のアドレスの取得は合法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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