使用变量在C中创建一个2D数组

时间:2014-10-12 21:27:54

标签: c arrays malloc

我有一个整数变量x,我需要用它来制作两个2D数组,但是我得到一个错误“无法分配一个常量0的数组”。在做了一些研究后,我显然需要使用malloc,但我不知道如何将它应用到我目前的情况。

我需要的两个阵列:

int firMat[x][5];
int secMat[5][x];

3 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int x = 2;
    int **firMat;//int firMat[x][5];
    int **secMat;//secMat[5][x];
    int i;

    firMat = malloc(x * sizeof(int*));
    for(i = 0; i< x; ++i)
        firMat[i] = malloc(5 * sizeof(int));

    secMat = malloc(5 * sizeof(int*));
    for(i = 0; i< 5; ++i)
        secMat[i] = malloc(x * sizeof(int));

    //do stuff E.g. fir[2][1] = 21;
    //release E.g.
    //for(i = 0; i< x; ++i)
    //    free(firMat[i]);
    //free(firMat);

    return 0;
}

答案 1 :(得分:0)

如果你正在使用C99,这将有效。它将创建一个“可变长度数组”,遗憾的是,在C11中,VLA已被简化为“可选”。

为此使用malloc,通常我会放弃双数组符号,并将内存视为平面一维数组,然后数组[i] [j]变为ptr [i * cols + j]。

答案 2 :(得分:0)

尝试初始化x,如下例所示

#define x 2 //outside the function

然后像这样使用x

int firMat[x][5];
int secMat[5][x];