2012-01-06 21 views
2

私のクラスのノートによると、あなたはポインタと動的に割り当てられた配列は

Aが配列へのポインタです
int *A = new int[5] 

のようにC++での配列を割り当てることができます。

しかし、A[3]として配列にアクセスできます。なぜあなたはそれを行うことができますか? Aは実際の配列ではなくポインタですか?

+0

:Aタイプである「intへのポインタ」しかし、それは最初の要素を指し動的に割り当てられたint配列の配列 – sellibitze

答えて

5

索引付けoperator[]は、配列ではなくポインタで機能するように実際に定義されています。 A[3]は実際には*(A+3)の同義語です。これは、配列が最初の要素へのポインタに暗黙的に変換できるという事実の結果として配列に対して機能します。

+1

私はそれがその方法を説明したことは聞いたことがありません - きちんと:) +1。 –

+0

@ w00te:これは実際の説明ではありません。それはすべての結果を伴う定義です:例えば3 [A]。 –

3

A [3]はポインタを逆参照する*(A + 3)のエイリアスです。

1

あなたは正しいです!基本的に、これは構文的な砂糖です。つまり、言語デザイナーがあなたの人生を少し楽にするために何かを置くことを意味しますが、舞台裏では全く異なることをやっています。実際には、ポインタの位置をAにして、ポインタをintサイズ上に移動し、逆参照によって値を与えます。

1

これはポインタ演算の出発点です。ポインタを使って値を加算または減算することはできますが、配列から移動しない限り(配列の直後に移動することができます)。基本的には、A LEATでi + 1要素を持つ配列へのポインタであるため、次のホールド(*タイプ*のよう

A[i] 
*(A + i) // this what A[i] means 
*(i + A) // addition is commutative 
i[A]  // this sould work, too - and it does! 
関連する問題