最後から 1 つ先の配列要素のアドレスを取得できますか?
次のコードはプログラミングで議論の対象となっていますコミュニティ:
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
特に、この文脈において &array[5] が正当な C コードであるかどうかという問題
C 標準のスタンス
C 標準によると、特に:
の影響&array[5]
これらのルールを &array[5] に適用すると、次のようになります:
合法ですか?
はい、合法です。標準では、逆参照されない限り、ポインタが配列の末尾を超えた 1 つの要素を指すことを明示的に許可しています。この場合、&array[5] はアドレスを取得するためにのみ使用され、そのアドレスの値にアクセスするためではないため、標準で許可されている範囲内にあります。
との違いarray 5 or &array[4] 1?
&array[5] の動作は array 5 または &array[4] 1 とは異なりますこれは、演算子と [] の優先順位と、[] によって暗示される単項 * 演算子の動作の組み合わせによるものです。具体的には:
対照的に、&array[5] は、& 演算子が削除され、[] 演算子が演算子に変更されたかのように評価され、配列 5 になりますが、単項の評価は行われません。 * 演算子。
以上がC では、末尾の 1 つ先の配列要素のアドレスを取得することは合法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。