【发布时间】:2014-11-03 16:33:16
【问题描述】:
让我们考虑以下 C 代码:
char matrix[10][10];
char** array;
array = matrix;
printf("%c", array[2][3]);
我在array = matrix 在线收到警告:assignment from incompatible pointer type
我猜这是因为第一个数组是静态声明的,而第二个数组是动态声明的,但真正的问题在于printf 行。程序只是崩溃了。
我似乎无法使用 [][] 运算符访问 char**。
我该如何解决?
注意:我稍微简化了上下文。在原始程序中,array 是通过一个返回类型为char** 的函数分配的,但实际上返回的是一个char[10][10]。
【问题讨论】:
-
“我似乎无法使用 [][] 运算符访问 char**。”。你的理论是错误的。你一开始没有
char**。你有一个char[10][10],你试图强迫它成为一个char**,你不能,这就是警告告诉你的。 -
第二个不是“动态声明”,而是将应该是
pointer to a pointer的内容分配给pointer to an array of pointers。此外,如果您想要动态分配多维数组,您将必须指定其所有维度,但第一个维度除外。