-1

ループによって N 個のフィールドを作成しfor、そのフィールドのそれぞれにi. 私が得たいもののイラスト(アイデアを示すためだけに、それが間違っていることはわかっています):

int n = 33;

for (i = 1; i <= n; i++) {
   int field_i[5];
}

-> getting field_1[5], field_2[5],...., field_33[5]

Cでそのようなものを取得する方法はありますか? 初心者ですので、的外れな質問でしたら申し訳ありません。

質問を拡張するには (2 次元配列 - パーフェクト! それが私が探していたものです!) - ユーザーにフィールド数 n を設定してもらいたい場合、メモリを正しく割り当てるにはどうすればよいですか? (scanf等の条件なしの簡易版)

int n, num;
int *field;

printf ("Number of fields:\n");
scanf ("%d", &n);

for (i = 0; i < n; i++) {
   field[i] = (int *) malloc (4 * sizeof( *field))
}

それは間違っていると思いますか?(やってみるとうまくいかない)

初心者の質問を追加して申し訳ありません。Googleで検索しようとしましたが、失敗しました。

4

4 に答える 4

2

おそらく 2 次元配列を探しているでしょう:

int field[n][5];

例:

int main(void){

    int n = 3, i, j, k=0;
    int field[n][5];

    for(i = 0; i < n; i++) {
        for(j = 0; j < 5; j++) {
            field[i][j] = k++;
        }
    }

    for(i = 0; i < n; i++) {
        for(j = 0; j < 5; j++) {
            printf("%3d", field[i][j]);
        }
        printf("\n");
    }

    return 0;
}

出力:

Cmd-$> out.exe
  0  1  2  3  4
  5  6  7  8  9
 10 11 12 13 14
于 2013-11-13T11:43:33.457 に答える
1

いいえ、そのような方法ではできません。しかし、それは似たようなものに置き換えることができます:

int (*field_)[m] = calloc( n, m*sizeof(int)); // or malloc(n*m*sizeof(int));
/* a lot of some operations */
free(field_);

n 個の要素があります: field_[0], field_[1] ... . そして、それらはすべて m int を持っています。

于 2013-11-13T11:35:27.283 に答える