首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++数组作为参数-为什么只需要指定“外部”维度

C++数组作为参数-为什么只需要指定“外部”维度
EN

Stack Overflow用户
提问于 2013-07-16 03:43:38
回答 4查看 2.8K关注 0票数 7

我正在尝试弄清楚多维数组,特别是如何通过将它们传递给函数来填充它们。这一切都很不直观,但最不直观的事情是,对我来说没有任何意义的是:

为什么在传递二维数组作为参数时,必须指定列数,而不是行数?我可能已经看过5个或更多的论坛帖子,它们给出了语法,但没有一个解释它背后的原因。我同意编译器需要知道数组的大小才能对其进行操作,但二维数组不是基本上是数组的数组吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-16 03:48:39

,但二维数组不是基本上是数组的数组吗?

它是。

但是编译器需要知道大小,以便在索引到数组时能够正确地执行指针运算(当然,除了分配,但我们在这里是在函数的上下文中谈论),因为多维数组在内存中是连续的。int arr[2][3]声明一行中有3个int,并且两个3-int行紧随其后。

现在,当你将数组传递给函数时,数组会发生什么,它们会衰减成一个指针。但是,第一个(最里面的)维数衰减为1才是合乎逻辑的,因为我们(理论上)可以使用指向第一个元素的单个指针来索引任意长度的数组。

但是,如果存在多个维度,则编译器需要对这些维度进行,以便它可以在其他维度上执行指针运算。

Here is一些你应该额外阅读的东西。

票数 13
EN

Stack Overflow用户

发布于 2013-07-16 03:53:36

将数组参数传递给函数时,该参数将转换为指向数组第一个元素的指针。

C++中的二维数组实际上是一个数组的数组。因此,您传递的参数是指向包含第一列的数组的指针。

要访问第二列,指针必须递增超过第一列。为此,编译器必须知道列的大小,就像它必须知道任何其他数组元素的大小一样。

票数 4
EN

Stack Overflow用户

发布于 2013-07-16 03:47:48

实际上,您需要指定除第一个维度之外的所有维度。原因是编译器不知道要分配多少内存。

有关详细答案,请参阅以下问题:

https://stackoverflow.com/a/2562111/1822214

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17662507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档