next up previous contents
Next: B.8 ANSI C のプロトタイプ宣言とは? Up: B.7 配列の使い方 Previous: B.7.1 添字は 0 から

B.7.2 配列の大きさは整定数

配列の添字はコンパイル時に決めないといけない(実行時にはもう変えられ ない)。

        /* 間違っているプログラム */
        #include <stdio.h>
        main()
        {
            double a[n];
            int n;
            scanf("%d", &n);
            for (i = 0; i < n; i++)
                scanf("%lf", &a[i]);
            ....
        }
のようなプログラムは駄目だということになる。このプログラムの修正の方法 は二通りあって、
  1. 十分な大きさの配列を宣言する。例えば、n が大きくても $ 1000$ は 越えないと判断したら、最初から大きさ $ 1000$ の配列を宣言して使う、という 手があります。
            #include <stdio.h>
            #define MAXN 1000
            main()
            {
                double a[MAXN];
                int n;
                scanf("%d", &n);
                for (i = 0; i < n; i++)
                    scanf("%lf", &a[i]);
                ...
            }
    
  2. 配列でなくて、ポインターを利用する。
            #include <stdio.h>
            main()
            {
                double *a;
                int n;
                scanf("%d", &n);
                if ((a = (double *)malloc(sizeof(double) * n)) == NULL) {
                     fprintf(stderr, "必要なメモリーが確保できませんでした\n");
                     exit(1);
                }
                for (i = 0; i < n; i++)
                    scanf("%lf", &a[i]);
                ...
            }
    
    のようにします。


next up previous contents
Next: B.8 ANSI C のプロトタイプ宣言とは? Up: B.7 配列の使い方 Previous: B.7.1 添字は 0 から
Masashi Katsurada
平成18年4月28日