2017-04-06 116 views
1

我在搜索C中的指针,我发现this question。基本上,用户想知道如何在C中传递一个矩阵作为函数的参数。最投票答案表示他不能使用指针(类型**标识符)的指针,因为:为什么不能传递一个二维数组作为函数参数?

(...)任何静态二维数组要求指针的第二个层次是const指针静态数组

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

+0

您引用的文字没有意义。看起来像写了它的人也删除了他的帐户 –

+2

基本上声明'int array [x] [y];'(其中'x'和'y'是常量),你声明一个类型为int [x] [ Y]'。当作为参数传递给函数时,第一级间接转换为指针。这意味着它将作为'int(*)[y]'传递,它与** int **不同。 'int **'是一个**指针指向int的指针,'int(*)[y]'是一个**指向int数组的指针**'[y]' (整数大)。 –

+0

在这种情况下,“静态”可能意味着“与动态相反”。指针指针语法不是二维数组,大多数情况下也是不好的做法。请参阅[正确分配多维数组](http://stackoverflow.com/questions/42094465/correctly-allocating-multi- dimensional-arrays)。 – Lundin

回答

1

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

我认为他的意思是说数组需要被视为连续的;它必须是一个接一个的元素序列,没有空间指针。他可能会试图声称,解除引用一个二维阵列(例如*matmat[0])应导致常数指向子阵列(在某些情况下,这也是不正确的,其中一个I'当作为sizeof的操作数使用时,将很快覆盖)。

FWIW,这也是不正确:

先前报头将是正确的,如果基体是动态数组。

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

...这是如何编码的?

错误,因为这问题,因为int **int *对象,而不是在int[SIZE]对象。

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

请看这个答案的第一段。

相关问题