1. ホーム
  2. c

[解決済み] C言語では負の配列インデックスが許されますか?

2022-05-13 21:01:41

質問

あるコードを読んでいて、その人が arr[-2] の前にある 2 番目の要素にアクセスするために arr のようにします。

|a|b|c|d|e|f|g|
       ^------------ arr[0]
         ^---------- arr[1]
   ^---------------- arr[-2]

それは許されるのか?

私が知っているのは arr[x] と同じである。 *(arr + x) . ですから arr[-2]*(arr - 2) で、これはOKのようです。どうでしょうか?

どのように解決するのですか?

その通りです。 C99 §6.5.2.1/2 より。

添え字の定義である 演算子[]は、E1[E2]が (*((E1)+(E2))) と同じです。

魔法はありません。 1-1等価です。 ポインタを再参照するときはいつも通り、それが有効なアドレスを指していることを確認する必要があります (*)。