为什么不能将二维数组作为函数参数传递?

时间:2017-04-06 04:52:36

标签: c arrays pointers matrix

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

  

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

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

1 个答案:

答案 0 :(得分:1)

  

当他说“const指向静态数组的指针”时,他的意思是什么?

我认为他的意思是说阵列需要被视为连续的;它需要一个接一个的元素序列,没有指针空间。他可能试图声称取消引用一次二维数组(例如*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 *,这意味着 指针的空间,并且暗示<{1}} 可能不是连续的。

  

......这是如何编码的?

对于该问题,错误地,matrix指向int **个对象,而不是int *个对象。

  

...为什么它必须是指向静态数组的const指针

请参阅本答案的第一段。

相关问题