【发布时间】:2020-10-25 03:35:04
【问题描述】:
这可能是一个愚蠢的问题,但我不明白为什么会出现此错误:
void func (int ** array) { }
int main (void) {
int array[5][5] = { };
func(array);
}
warning: passing argument 1 of 'func' from incompatible pointer type [-Wincompatible-pointer-types]
func(array);
^~~~~
note: expected 'int **' but argument is of type 'int (*)[5]'
void func (int ** array) { }
~~~~~~~^~~~~
【问题讨论】:
-
您可能会喜欢comp.lang.c faq 的第 6 节:简而言之:数组不是指针,指针不是数组。
-
另外,函数中的
int ** array不知道int array[5][5]每一行的宽度。 -
为什么需要宽度?
-
因为为了访问
array[3][2],处理器需要计算(3*width + 2) * sizeof(int)。如果您将函数声明为void func(int (*array)[5]),则编译器拥有进行计算所需的信息。如果编译器支持variable length arrays,您可以将函数声明为void func(int rows, int cols, int array[rows][cols])。这将允许代码使用任何大小的数组。 -
首先:欢迎来到SO!对于您的问题:也许
typedef可以使其更具可读性。检查我的答案。
标签: arrays c pointers multidimensional-array syntax-error