我如何让它工作?我不确定客户将分配多少发票并希望保持动态。请帮忙。
#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]的数字,代码运行正常。
答案 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]));