入力個数が、実行スタートしてみないと分からない場合、
配列で何個の要素を用意したら分からないので、必要以上に十分な記憶域になる数で用意しなければなりません。
配列は、プログラムを作る時に定数で用意するもので、実行スタート後に変更することができないからです。
このような場合、malloc関数で、必要な記憶域をシステムに要求し、
それで得られたポインタを記憶し、そのポインタを使って配列のようにアクセスします。
そして、その情報が要らなくなった時点で、freeで再び記憶を別の用途で使えるように開放すれば、
メモリを効率よく使えます。
以下で簡単な例を示します。
#include <stdio.h> #include <stdlib.h> /* malloc利用のためインクルード */ main() { int *a;/* 配列の代わり使うポインタ */ int count;/* 使うデータ数 */ int i; printf("入力数>"); scanf("%d", &count); a = malloc( count * sizeof(int) ); /* 必要なサイズの記憶域を要求 */ for( i = 0; i < count; i++){ printf("データ入力>"); scanf("%d", a + i ); } for( i = 0; i < count; i++){ printf("%d番目のデータ:%d\n", i+1 , a[i]); } free(a); /* メモリの開放(プロセスが終了する時、開放されるので無くてもよいが・・) */ }
実行例
入力数>6 データ入力>1 データ入力>2 データ入力>3 データ入力>4 データ入力>5 データ入力>6 1番目のデータ:1 2番目のデータ:2 3番目のデータ:3 4番目のデータ:4 5番目のデータ:5 6番目のデータ:6