ホームページ > バックエンド開発 > C++ > `&array[5]` は配列の境界を越える C の有効なポインタですか?

`&array[5]` は配列の境界を越える C の有効なポインタですか?

Mary-Kate Olsen
リリース: 2025-01-04 10:03:35
オリジナル
356 人が閲覧しました

Is `&array[5]` a Valid Pointer in C   Beyond Array Bounds?

配列の添字は配列の境界を越えることができますか?

次のコードが C 標準に準拠しているかどうかという疑問が生じます:

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
ログイン後にコピー

具体的には、このコンテキストにおける &array[5] の有効性は次のとおりです。

C 規格

C99 ドラフト規格による:

  • §6.5.2.1、パラグラフ 2: "E1[E2] は (*((E1) と同一です) (E2)))"
  • §6.5.3.2、段落 3 (強調): "オペランドが [] 演算子の結果である場合、& 演算子も単項 * [] によって暗示される演算子が評価され、その結果は & 演算子が削除され、[] 演算子が演算子."
  • §6.5.6、段落 8: "式 P が配列オブジェクトの最後の要素の 1 つ先を指す場合、式 (P) 1 は最後の要素の 1 つ先を指します式 Q が配列オブジェクトの最後の要素の 1 つ先を指す場合、式 (Q) - 1 は配列の最後の要素を指しますobject."

結論

これらの規定は次のことを示しています:

  • ポインターは正当にオブジェクトの末尾を超えた 1 つの要素を指すことができます。 array (逆参照なし).
  • &array[5] は以下と同等です&*(配列 5)、これは (配列 5) と等価です。
  • (配列 5) は配列の終わりの 1 つ先を指します。
  • &array[5] はそうではありません逆参照になりますが、C 標準によれば正当です。

以上が`&array[5]` は配列の境界を越える C の有効なポインタですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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