【问题标题】:Accessing a bidimensional(or tridimensional) array through a pointer通过指针访问二维(或三维)数组
【发布时间】:2010-09-25 17:04:26
【问题描述】:

当你有这样的数组时:

int foo[3][2][2];

然后你做:

int *bar = &foo[0][0][0];

这就是它的工作方式吗?

*bar == foo[0][0][0];
*(bar+1) == foo[0][0][1];
*(bar+2) == foo[0][1][0];
*(bar+3) == foo[0][1][1];
*(bar+4) == foo[1][0][0];

我不确定并且有一些代码取决于它是否有效。

【问题讨论】:

  • 注意:我不想做比较,只是想知道这是否是等价的。

标签: c++ c arrays pointers


【解决方案1】:

是的,这就是 row major ordering,C 正在使用它。

【讨论】:

  • 请注意,虽然原则上这些比较确实是正确的,但严格来说,这将是未定义的行为,因为他从 int[2] 类型的数组中的元素中获取了指针。然后将任何大于 2 的数字添加到它是未定义的行为(但仅在理论上,将始终在现实中起作用)。
【解决方案2】:

在大多数系统上,是的。

【讨论】:

  • 你有反例吗?
  • 或者,如果不是反例,那么标准中的一些内容表明了多维数组的真正布局规则。
猜你喜欢
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2016-06-19
相关资源
最近更新 更多