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