我试图创建一个2d array
,但没有提及如下所示的维度:
int m1[][] = {{1,2}, {3,4}};
编译时出现以下错误:
error: array type has incomplete element type
是否可以在不提及row
和column
的情况下在stack
上创建2d array
(而不是heap
上的动态内存分配)?
如果编译器无法确定整数 2d 数组的维度,则如何确定字符串 2d 数组的空间要求。例如
char *keywords[] = {"auto", "static", "extern", "volatile"};
您可以省略外部维度,但不能省略内部维度。所以这没关系
int m1[][2] = {{1,2}, {3,4}};
对于您的第二个问题:char *keywords[]
不是 2D 数组!它是一个指针数组。指针不是数组;数组不是指针!(只是数组衰减为指向数组第一个元素的指针,如果用作右值)。
更新:实际回答您的问题:字符串通常会在只读存储中静态"分配"(例如直接写入目标文件/程序)。因此,将您的数组声明为 char *[]
也是错误的 - 它应该是一个const char *[]
。
正确,编译器 b/c 将 a) 无法确定要分配多少空间,b) 无法确定给定元素在数组中的位置。