我需要在C中创建一个全局数组,其大小由用户输入

时间:2012-03-22 21:05:30

标签: c arrays size global

基本上我需要在C中创建一个数组的全局变量。数组将为[n] [22] [n + 1],其中n为3,4,5或6,由用户选择。

有没有办法做到这一点,或者我应该制作数组[6] [22] [7],并且处理它的函数只使用最多n的部分(如果这有意义的话)? / p>

我之前必须要做一个计算机科学课,但不记得究竟该怎么做。

3 个答案:

答案 0 :(得分:3)

对于一个小的数组(好吧,假设数据类型合理),你可能最好不要在你的问题中提到你所提到的[6][22][7]分配 - 这不像你会浪费那么多空间。不幸的是,C99可变长度数组不适用于全局数组。这意味着您唯一的其他选择是使用malloc() / free()进行动态分配。

答案 1 :(得分:0)

您可以使用文件范围指针指向您在函数中动态分配(malloc函数)的数组的第一个元素。

答案 2 :(得分:0)

如前所述,在这种特殊情况下,做除[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()

取消分配内存