typedef中的动态2D数组

时间:2013-04-01 16:36:15

标签: c arrays

我如何让它工作?我不确定客户将分配多少发票并希望保持动态。请帮忙。

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

typedef struct _cust{
    int id;
    int invoices[][2];
} cust;

cust account[] = {
    {1,{10,100}},
    {2,{{10,100},{20,200}}},
    {3,{{10,100},{20,200},{30,300}}}
};

int main(void) {
    printf("%d\n", account[0].invoices[0][0]);
    printf("%d\n", account[1].invoices[1][0]);
    printf("%d\n", account[2].invoices[2][0]);
    return 0;
    }

当我运行此代码时,我收到以下错误...

error: initialization of flexible array member in a nested context

如果我填写类似于这个int发票[3] [2]的数字,代码运行正常。

2 个答案:

答案 0 :(得分:1)

您可以将invoices更改为int** invoices,然后使用malloc()动态分配。 您可以像这样分配2D数组:

int** theArray;
theArray = (int**) malloc(arraySizeX*sizeof(int*));
for (int i = 0; i < arraySizeX; i++)
   theArray[i] = (int*) malloc(arraySizeY*sizeof(int));

答案 1 :(得分:1)

指向具有两个元素的数组的指针如下所示:

int (*array)[2];

但您可能更容易先使用typedef

typedef int pair[2];
.
.
pair * array;

你可以随时为这样的野兽分配一大块。如果你有一个C99(或向上)兼容的编译器,这将读作

array = malloc(sizeof(pair[n]));