私がこのようなことをするとしましょう
int *array;
array = new int[10];
この配列のメモリはどのように設定されていますか? は何型array[0]
ですか?(ポインタ? int?)
このコードは、最初に配列と呼ばれるポインター用のスペースを割り当てます。このメモリはスタックに割り当てられます。
次に、ヒープからメモリのブロックを割り当てて10個の整数を保持し、アドレスをに割り当てますarray
。
array[0]
10のブロックの最初の整数を参照します。下付き文字は、ポインターではなく値になります。
そして、神のために、人々があなたに与えているいくつかの答えを受け入れ始めてください!
この場合、array[0]
はint型です。
メモリは、フリーストアのどこかに割り当てられた10個のintを保持するためのメモリを指すポインタです(これは主に次のように解釈されます:「正直なところ、アドレスは気にせず、メモリであり、使用できます。 「削除するまで」)。
この場合、元々Cで定義された同等性に依存していることに注意してください。これは。x[y]
と同等*(x+y)
です。この場合、yourx
はポインタであり、ポインタへの追加は、それが指す型のサイズの増分で行われるため、を使用すると、。が指すメモリ内array[N]
のN番目の項目を取得しarray
ます。
ちょっとした詳細:これを行うべきではありません-おそらくこれまでに。C++で使用する正当な理由はほとんどありません。new type[size]
かつては、より良い代替案(たとえばstd::vector
)がまだ利用できなかったためにそうしましたが、最近ではお粗末な考えです。
配列の要素としてのarray[0]はintです。
配列はすでにintへのポインタとして宣言されています。
メモリ内で、「new」呼び出しは、10個の整数を保持するためにスペースの単一ブロックを割り当てます。「配列」は、そのブロックの先頭へのポインタです。array[0]は最初の要素です。array[1]は2番目です。
この配列のメモリはどのように設定されていますか?
new int[10]
type の 10 個の値を格納するのに十分なメモリをフリー ストアから動的に割り当てますint
。変数に保存するそのメモリへのポインタを提供しますarray
。
array
それ自体はポインター型の自動変数です。通常、現在の関数呼び出しに自動的に割り当てられたスタックの領域に格納され、関数が戻ると割り当てが解除されます。
メモリを使い終わったら、 を使用してメモリをフリー ストアに戻す必要がありますdelete [] array
。これは間違いやすいため、通常はスマート ポインターやコンテナーなどのRAII型を使用して動的リソースを管理することをお勧めします。この場合、std::vector<int> array(10)
は同じサイズの配列を提供し、範囲外になると自動的に削除します。
は何型
array[0]
ですか?
array[0]
は の配列の最初の要素なint
ので、その型はint
です。