5

私は当初、ポインターと配列の用途が異なると考えていました。前者の場合、括弧内にあるものをポインターに追加してから、合計を逆参照します。後者の場合、配列の i 番目の要素を生成するだけです。

次に、配列変数が最初の要素へのポインターを返すことに気付きました。そのため、演算子はいずれの場合も同じことを行います: オフセットと逆参照です。

ブラケット[]演算子は、実際にCで1回しか使用できませんか?

4

2 に答える 2

15

[]は配列添え字演算子と呼ばれますが、構文的にはポインターで使用されます。配列は、この使用方法 (および他の多くの方法) の最初の要素へのポインターに変換されます。はい、[]配列とポインタについても同じです。

C11 §6.5.2.1 配列添字

制約

式の 1 つは型「完全なオブジェクト型へのポインター」を持ち、もう 1 つの式は整数型を持ち、結果は型「型」を持ちます。

セマンティクス

角括弧内の式が後に続く後置式[]は、配列オブジェクトの要素の添え字指定です。添字演算子の定義[]E1[E2]と同じです(*((E1)+(E2)))+二項演算子に適用される変換規則により、E1が配列オブジェクト (配列オブジェクトの最初の要素へのポインターと同等) でE2あり、整数である場合、(ゼロから数えて)の- 番目の要素をE1[E2]指定します。E2E1

于 2013-11-05T05:00:20.323 に答える
7

それが「1 つのこと」を行うかどうかは、「1 つのこと」が何を意味するかによって異なります。

Cでは、演算子は次のように定義されています

e1[e2]   means   *(e1+e2)

それでおしまい。ひとこと。またはそれは?aが配列で、がi整数であるとします。私たちは書くことができます:

a[3]
a[i]
3[a]
i[a]

はポインタpiあり、整数であるとします。私たちは書くことができます

p[3]
p[i]
3[p]
i[p]

配列またはポインター。2つのこと?あまり。2 つのオペランドの 1 つが「配列」であるプラス演算子を使用すると、実際にポインター演算を行っていることがわかります。

あなたの質問の2番目の部分-ポインター演算以外に使用できますか-は基本的にCではいいえですが、C++でははいです。C++ではこの演算子をオーバーロードできるためです。ただし[]、型式で表示されることがありますが、それはおそらくあなたが求めているものではないでしょう。その場合、実際には演算子として使用していないからです (型演算子として使用していますが、これは異なります)。

于 2013-11-05T05:05:03.797 に答える