これが私がC++で書いた基本的なコードです。
#include <iostream>
int main(int argc, char *argv[])
{
int* my_dynamic_array;
int size;
std::cin >> size;
my_dynamic_array = new int[size];
for (int k=0; k<size; k++)
my_dynamic_array[k] = k;
for (int k=0; k<size; k++)
std::cout << my_dynamic_array[k] << std::endl;
delete[] my_dynamic_array;
return 0;
}
さて、これがこのコードで起こっていることです。std :: cinを使用して配列のサイズを入力するように求められ、次にnewキーワードを使用して配列にメモリを動的に割り当てます。ここには、最初は少し奇妙に見える詳細がいくつかあります。これが、多くの新しいC++開発者との混乱を引き起こしているようです。
したがって、最初に、配列宣言の代わりにポインタを使用して動的配列を宣言しました。たとえば、のint *my_dynamic_array
代わりに使用しましたint my_dynamic_array[]
。最初はこれは些細なことのように思えますが、CおよびC++で何が起こっているかについて理解する必要があることがあります。
配列を静的に宣言すると、そのメモリを使用できるように取っておくことをプログラムに指示することになります。それは実際にそこにあります。使い始めるのはあなた次第です。配列を動的に作成するときは、ポインターから始めます。ポインタは、メモリへの単なる参照です。そのメモリはまだ割り当てられていません。たとえば、で何かにアクセスしようとするとmy_dynamic_array[3]
、厄介なエラーが発生します。これは、その場所のメモリには実際には何もないためです(少なくとも、使用するプログラムに与えられたものは何もありません)。
delete[]
の代わりにの使用にも注意してくださいdelete
。これが、アレイの使用が終了したときにメモリを解放する方法です。
これをCで行っている場合、これはほとんど同じように考えることができますが、代わりにnew
とdelete[]
がmalloc
ありますfree
。
動的配列とポインターの微妙な違いを知るのは難しいです。何が起こっているのかを完全に理解するまでに少し時間がかかりました。頑張って頑張ってください。