Мне нужно сделать глобальный массив в C с размером, введенным пользователем - PullRequest
3 голосов
/ 23 марта 2012

В основном мне нужно сделать глобальную переменную в C, которая является массивом.Массив будет [n] [22] [n + 1], где n равно 3,4,5 или 6 и выбирается пользователем.

Есть ли способ сделать это или я долженсделать массив [6] [22] [7], и иметь функции, имеющие дело с ним, использовать только части до n (если это имеет смысл)?класс информатики, но не могу точно вспомнить, как это сделать.

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Для небольшого массива (при условии, что типы данных разумного размера) вам может быть лучше сделать выделение [6][22][7], которое вы упомянули в своем вопросе - это не значит, что вы будете тратить так много места.К сожалению для вас, массивы переменной длины C99 не работают для глобальных массивов.Это означает, что ваш единственный вариант - динамическое распределение с использованием malloc() / free().

0 голосов
/ 23 марта 2012

Как упоминалось ранее, в этом конкретном случае выполнение чего-либо, кроме статического присвоения [6][22][7], было бы пустой тратой времени.Если вы действительно хотите динамически распределить массив, используя malloc:

/*  Suppose that you want a [5][22][6] */

int main() {
    int i,j,k;
    int ***boo;
    int d_1,d_2,d_3;

    d_1=5;
    d_2=22;
    d_3=6;

/*
  +------------------------------------------+
  |  For each dimension, a malloc is needed  |
  +------------------------------------------+
*/
    boo = malloc(d_1*sizeof(int*));
    for (i=0;i<d_1;i++) {
            boo[i] = malloc(d_2*sizeof(int*));
            for (j=0;j<d_2;j++) {
                    boo[i][j] = malloc(d_3*sizeof(int*));
                    for (k=0;k<d_3;k++) {
                            boo[i][j][k] = i+j*k;
                    }

            }
    }

/*
  +----------------------+
  |  Testing the values  |
  +----------------------+
*/
    for (i=0;i<d_1;i++) {
            for (j=0;j<d_2;j++) {
                    for (k=0;k<d_3;k++) {
                            printf("%d ",boo[i][j][k]);
                    }
                    printf("\n");
             }
     }


    return 0;
}

Это, по сути, сработает.Это может быть полезно, если у вас больше данных.

Не забудьте освободить память, используя free()

0 голосов
/ 23 марта 2012

Вы можете использовать указатель области файла, который указывает на первый элемент массива, который вы динамически выделяете (функция malloc) в функции.

...