初始化二维数组而不指定大小

Dan*_*iel 3 c arrays multidimensional-array

我可以在 c 中初始化一维数组,无论是否初始化其大小:

int x[] = {1,2,3,4,5};
int y[5] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试对二维数组执行相同操作时,例如

int x[][] = {{1,2,3},
             {4,5,6}};
Run Code Online (Sandbox Code Playgroud)

我得到一个error: array type has incomplete element type. 如果我在不同的行声明和初始化数组,也会发生同样的错误。但是,我可以在指定大小的同时初始化它:

int x[2][3] = {{1,2,3},
               {4,5,6}};
Run Code Online (Sandbox Code Playgroud)

这一点没有错误。我的问题是,是否可以在不首先初始化其大小的情况下初始化多维数组?我问这个问题是因为对于最终的项目,我需要能够声明数组并稍后初始化它们,并且在编译时将不知道它们的大小。

Joh*_*nck 5

是否可以在不首先初始化其大小的情况下初始化多维数组?

不,不是以您提议的方式或类似的方式。

我需要能够声明数组并稍后初始化它们,并且它们将具有动态大小。

如果编译时大小未知,则应使用 分配数组a = malloc(x * y * sizeof(value_t))。然后像这样索引它a[i + j*y]