我正在尝试弄清楚多维数组,特别是如何通过将它们传递给函数来填充它们。这一切都很不直观,但最不直观的事情是,对我来说没有任何意义的是:
为什么在传递二维数组作为参数时,必须指定列数,而不是行数?我可能已经看过5个或更多的论坛帖子,它们给出了语法,但没有一个解释它背后的原因。我同意编译器需要知道数组的大小才能对其进行操作,但二维数组不是基本上是数组的数组吗?
发布于 2013-07-16 03:48:39
,但二维数组不是基本上是数组的数组吗?
它是。
但是编译器需要知道大小,以便在索引到数组时能够正确地执行指针运算(当然,除了分配,但我们在这里是在函数的上下文中谈论),因为多维数组在内存中是连续的。int arr[2][3]
声明一行中有3个int
,并且两个3-int
行紧随其后。
现在,当你将数组传递给函数时,数组会发生什么,它们会衰减成一个指针。但是,第一个(最里面的)维数衰减为1才是合乎逻辑的,因为我们(理论上)可以使用指向第一个元素的单个指针来索引任意长度的数组。
但是,如果存在多个维度,则编译器需要对这些维度进行,以便它可以在其他维度上执行指针运算。
Here is一些你应该额外阅读的东西。
发布于 2013-07-16 03:53:36
将数组参数传递给函数时,该参数将转换为指向数组第一个元素的指针。
C++中的二维数组实际上是一个数组的数组。因此,您传递的参数是指向包含第一列的数组的指针。
要访问第二列,指针必须递增超过第一列。为此,编译器必须知道列的大小,就像它必须知道任何其他数组元素的大小一样。
发布于 2013-07-16 03:47:48
https://stackoverflow.com/questions/17662507
复制相似问题