問題
- 整数データの数を指定すると、その要素分だけ格納する配列を作成する (無駄がない配列)。
length of data :3 (配列の長さ、データの長さを入力) 0 :number :4 (各データを入力) 1 :number :5 2 :number :6 0 : 4 (3つ入力しおえたところで、入力は終了。続いて格納データを一気に出力) 1 : 5 2 : 6
- 配列の確保は、要素のサイズのメモリを連続確保すること (よくわかるC pp.83-84: 教科書では文字列を扱う配列の例)
- メモリの動的確保にはmalloc (memory allocation; メモリの確保)を利用する。
- 以下の例を確認のこと。今回の場合は、要素の型はintをnx個連続確保
- xは、確保された先頭のアドレス
- 先頭のアドレスは、配列にもポインタ演算にも利用できる(よくわかる C p.83-84)
- 一度に連続した領域を確保する場合はmallocのほか、callocを使うことが多い。
#include <stdio.h> #include <stdlib.h> int main (void) { int *x; int i,nx; printf("length of data :"), scanf("%d", &nx); x = (int *)malloc(sizeof(int)*nx); i = 0; while (i < nx) { printf("%d :number :", i); scanf("%d", (x+i)); i++; } /* 出力 x[i]と配列のように扱う */ i = 0; while (i < nx) { printf("%d : %d \n",i, x[i] ); i++; } /* 以下、ポインター演算による出力も行え */ i = 0; while (i < nx) { printf("%d : %d \n",i, *(x + i)); i++; } free(x); /* メモリの解放 忘れないこと */ return (0); }