创建一个整数2d数组(与字符串2d数组相比),但不提及维度

时间:2012-04-19 19:29:27

标签: c++ c arrays multidimensional-array stack

我试图创建一个2d array而不提及如下的维度:

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

编译时出现以下错误:

error: array type has incomplete element type

如果不提及2d arraystack,就无法在heap上创建row(与column上的动态内存分配相对) ?

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

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