c语言 - 为什么不能传递二维数组作为函数参数?



我正在搜索C中的指针,我发现了这个问题。基本上,用户想知道如何在 C 中将矩阵作为函数的参数传递。得票最多的答案是他不能使用指针到指针(类型 ** 标识符),因为:

(...) 任何静态 2D 数组都要求第二级指针是指向静态数组的常量指针

当他说"常量指针指向静态数组"时,他是什么意思?这是如何编码的?我知道常量变量(包含指针)是什么意思,所以也是静态变量。但是,在这种情况下,为什么它必须是指向静态数组的常量指针

当他说"常量指向静态数组的指针"时,他指的是什么?

我想他的意思是说数组需要被视为连续的;它需要是一个接一个的元素序列,没有指针的空间。他可能试图声称取消引用一次二维数组(例如*matmat[0]) 应该导致一个指向子数组常量(在某些情况下也是不正确的,当用作sizeof的操作数时,我将很快介绍其中之一)。

FWIW,这也是不正确的:

如果矩阵是动态数组,则前面的标头是正确的。

int mat[SIZE][SIZE];如果我们检查这个对象,sizeof mat等于sizeof (int) * SIZE * SIZE;在这个矩阵中没有任何指针存储的空间。然而,在void ins (int **matrix, int row, int column);中,int **matrix告诉我们matrix指向int *,这意味着有指针的空间,也暗示matrix可能不是连续的。

。这是如何编码的?

对于这个问题,不正确,因为int **指向int *对象,而不是int[SIZE]对象。

。为什么它必须是指向静态数组的常量指针

请参阅此答案的第一段。

最新更新