ヒープ上に配列を作成し、9から0までの文字で埋めることを望んでいた次のコードを理解するのに苦労しています([]表記を使用して、通常のスタック配列のように配列にインデックスを付けることができることはわかっていますこれを行うには、ポインターをより深く理解するためにこのようにしています):
int *ptrHeapArray = new int[10];
for(int f=9; f>=0 ;f--)
{
*ptrHeapArray = f;
ptrHeapArray++;
}
for(int f=0; f<10; f++)
cout << ptrHeapArray[f] << "\n";
完全に予期しない値を出力します。
上記を理解しているように、「new」コマンドはヒープ上に配列を作成し、配列があるアドレスへのポインターを送り返します。割り当てるポインター (ptrHeapArray) は int サイズであるため、ポインター ポスト インクリメントを使用して配列をナビゲートできると想定しました。しかし、結果は私の仮定が間違っていることを示しています。
これにより、おそらく「new」キーワードによって返されたポインターは配列全体への単なるポインターであり、何らかの理由で配列をステップスルーするために使用できないと考えるようになりました。そこで、「new」キーワードによって返されるポインターへの別のポインターを作成して、それを使用して配列の作成を試みました。
int *ptrHeapArray = new int[10]; //array to hold FRANK data in 32 bit chunks
int *ptrToHeapArrayPointer = ptrHeapArray;
for(int f=9; f>=0 ;f--)
{
*ptrToHeapArrayPointer = f;
ptrToHeapArrayPointer++;
}
for(int f=0; f<10; f++)
cout << ptrHeapArray[f] << "\n";
これはうまくいきました。なぜ私がこれをしなければならなかったのか、「new」キーワードによって返されたポインターを使用できなかったのか、誰かが説明できますか?
ありがとう