配列の代わりを動的に作ってポインタで管理する

入力個数が、実行スタートしてみないと分からない場合、 配列で何個の要素を用意したら分からないので、必要以上に十分な記憶域になる数で用意しなければなりません。
配列は、プログラムを作る時に定数で用意するもので、実行スタート後に変更することができないからです。
このような場合、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