2

我试图创建一个2d array而不提及如下尺寸:

int m1[][] = {{1,2}, {3,4}};

编译时出现以下错误:

error: array type has incomplete element type

不提及and就不能2d arraystack( 与动态内存分配相反) 上创建 a吗?heaprowcolumn

如果编译器无法确定整数二维数组的维度,它如何确定字符串二维数组的空间要求。例如,

char *keywords[] = {"auto", "static", "extern", "volatile"};
4

2 回答 2

2

正确,b/c 编译器将 a) 无法确定要分配多少空间,并且 b) 无法确定给定元素在数组中的位置。

于 2012-04-19T19:31:41.810 回答
2

您可以省略外部维度,但不能省略内部维度。所以这没关系

int m1[][2] = {{1,2}, {3,4}};

对于你的第二个问题:char *keywords[]不是二维数组!它是一个指针数组。指针不是数组;数组不是指针!(只是数组衰减为指向数组第一个元素的指针,如果用作右值)。

更新:要实际回答您的问题:字符串通常会在只读存储中静态“分配”(例如直接写入目标文件/您的程序)。所以将你的数组声明为也是错误的char *[]- 它应该是一个const char *[].

于 2012-04-19T19:31:56.460 回答