私は当初、ポインターと配列の用途が異なると考えていました。前者の場合、括弧内にあるものをポインターに追加してから、合計を逆参照します。後者の場合、配列の i 番目の要素を生成するだけです。
次に、配列変数が最初の要素へのポインターを返すことに気付きました。そのため、演算子はいずれの場合も同じことを行います: オフセットと逆参照です。
ブラケット[]演算子は、実際にCで1回しか使用できませんか?
[]
は配列添え字演算子と呼ばれますが、構文的にはポインターで使用されます。配列は、この使用方法 (および他の多くの方法) の最初の要素へのポインターに変換されます。はい、[]
配列とポインタについても同じです。
C11 §6.5.2.1 配列添字
制約
式の 1 つは型「完全なオブジェクト型へのポインター」を持ち、もう 1 つの式は整数型を持ち、結果は型「型」を持ちます。
セマンティクス
角括弧内の式が後に続く後置式
[]
は、配列オブジェクトの要素の添え字指定です。添字演算子の定義[]
はE1[E2]
と同じです(*((E1)+(E2)))
。+
二項演算子に適用される変換規則により、E1
が配列オブジェクト (配列オブジェクトの最初の要素へのポインターと同等) でE2
あり、整数である場合、(ゼロから数えて)の- 番目の要素をE1[E2]
指定します。E2
E1
それが「1 つのこと」を行うかどうかは、「1 つのこと」が何を意味するかによって異なります。
Cでは、演算子は次のように定義されています
e1[e2] means *(e1+e2)
それでおしまい。ひとこと。またはそれは?a
が配列で、がi
整数であるとします。私たちは書くことができます:
a[3]
a[i]
3[a]
i[a]
はポインタp
でi
あり、整数であるとします。私たちは書くことができます
p[3]
p[i]
3[p]
i[p]
配列またはポインター。2つのこと?あまり。2 つのオペランドの 1 つが「配列」であるプラス演算子を使用すると、実際にポインター演算を行っていることがわかります。
あなたの質問の2番目の部分-ポインター演算以外に使用できますか-は基本的にCではいいえですが、C++でははいです。C++ではこの演算子をオーバーロードできるためです。ただし[]
、型式で表示されることがありますが、それはおそらくあなたが求めているものではないでしょう。その場合、実際には演算子として使用していないからです (型演算子として使用していますが、これは異なります)。