mallocは、指定されたサイズのメモリを動的に割り当てるC標準ライブラリ関数・・・。
引数には、割り当てるメモリのサイズを指定する・・・。
戻り値には、割り当てたメモリ領域の先頭アドレスが返ってくる・・・。
これを使って、int型の動的配列を作ろう・・・。
mallocなどのユーティリティ関数を使うには、stdlib.hをインクルードする・・・。
変数と配列(正確には割り当てられた動的配列を指すポインタ)の宣言・・・。
まず、countに動的配列の要素数を入力してもらう・・・。
mallocで、要素数がcountのint型動的配列分のメモリを確保してもらう・・・。
1要素につき、sizeof(int)のサイズが必要なので、
malloc(sizeof(int) * count);
と指定する・・・。
mallocの戻り値はvoid *型で返ってくるが、int型配列として扱いたいのでint *型にキャスト(型変換)する・・・。
int_array = (int *)malloc(sizeof(int) * count);
キャストについては後日・・・。
とにかく、このint_arrayというポインタは、生成された動的配列を指している・・・。
動的配列にscanfで値を入れていく・・・。
int_arrayはポインタなので、ポインタ演算特性をいかして、
int_array + i
これはint_arrayのi番目の要素のアドレスを指す・・・。
scanfはこのアドレスの指す領域に入力された値を格納する・・・。
入力が終わったら、
各要素を今度は出力する・・・。
printfでは値を出力するので、
*(int_array + i)
としてint_arrayのi番目の要素の値をprintfに指定している・・・。
最後に、mallocで確保したメモリは、freeで必ず解放しなければならないので、
としてメモリを解放する・・・。
実行すると、
$ ./malloc count: 5 int_array[0]: 4 int_array[1]: 3 int_array[2]: 2 int_array[3]: 5 int_array[4]: 1 int_array[0] = 4 int_array[1] = 3 int_array[2] = 2 int_array[3] = 5 int_array[4] = 1
こんな感じ・・・。
この配列は動的に確保されて、そして解放されたものである・・・。