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



我试图创建一个2d array,但没有提及如下所示的维度:

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

编译时出现以下错误:

error: array type has incomplete element type

是否可以在不提及rowcolumn的情况下在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) 无法确定给定元素在数组中的位置。

相关内容

  • 没有找到相关文章

最新更新