【问题标题】:3 D array representation3D 数组表示
【发布时间】:2017-10-21 13:36:05
【问题描述】:

假设我们有一个数组 a[90][30][40],其中第一个元素从 a[1][1][1] 开始,那么 a[20][20][30] 的索引是多少在列主要表示中?

根据我的说法,a[x][y][z] 表示 x 是深度,y 是行,z 是列。

所以在我看来,索引应该是 19(30)(40) + (29)(30) + (20-1) = 23689。

我读到https://eli.thegreenplace.net/2015/memory-layout-of-multi-dimensional-arrays/ 说 a[x][y][z] 实际上意味着 x 是行,y 是列,z 是深度。

我在这里阅读了所有现有答案以及上面的链接并感到困惑。

我的计算正确吗?

【问题讨论】:

  • 第一个元素其实是a[0][0][0]
  • 您自己尝试解决什么问题 - 可能什么都没有。
  • @PeterJ_01 你还想让我解决什么问题?我展示了计算结果以及我阅读的链接。
  • 做一些实验。这才是正确的学习方式
  • 公式也在您发布的链接中,给定int a[rows][cols][layers];,元素a[i][j][k] 的偏移量为k + layers * (j + cols * i)

标签: c arrays multidimensional-array indexing


【解决方案1】:

我在评论中问过你,你做了什么来解决这个难题?不是你的“计算”。写三行代码就可以得到答案:

char a[10][10][10];


for (int i = 0; i < 10; i++)
    printf("&a[%1d][0][0] = %04zu\t\t&a[0][%1d][0] = %04zu\t\t&a[0][0][%1d] = %04zu\n", i, &a[i][0][0] - &a[0][0][0], i, &a[0][i][0] - &a[0][0][0], i, &a[0][0][i] - &a[0][0][0]);


&a[0][0][0] = 0000              &a[0][0][0] = 0000              &a[0][0][0] = 0000
&a[1][0][0] = 0100              &a[0][1][0] = 0010              &a[0][0][1] = 0001
&a[2][0][0] = 0200              &a[0][2][0] = 0020              &a[0][0][2] = 0002
&a[3][0][0] = 0300              &a[0][3][0] = 0030              &a[0][0][3] = 0003
&a[4][0][0] = 0400              &a[0][4][0] = 0040              &a[0][0][4] = 0004
&a[5][0][0] = 0500              &a[0][5][0] = 0050              &a[0][0][5] = 0005
&a[6][0][0] = 0600              &a[0][6][0] = 0060              &a[0][0][6] = 0006
&a[7][0][0] = 0700              &a[0][7][0] = 0070              &a[0][0][7] = 0007
&a[8][0][0] = 0800              &a[0][8][0] = 0080              &a[0][0][8] = 0008
&a[9][0][0] = 0900              &a[0][9][0] = 0090              &a[0][0][9] = 0009

【讨论】:

  • 我的计算正确吗?即使我把表示作为 .
【解决方案2】:

我的计算正确吗?

不,因为你的基础是错误的。

第一个元素是a[0][0][0],因为在数组中索引从 0 开始,而不是 1。

通常,3D 数组的第一个维度是行,第二个维度是列,第三个维度是深度。

当涉及到数组时,有两种流行的表示形式,row and column major order


您似乎很困惑并谈论 Fortran 数组(其中数组按列主要排序,索引从 1 开始),而不是 C 数组。

【讨论】:

  • 那怎么计算呢?我无法可视化 3d 数组的列主要表示。
  • 如果可能,请帮助我可视化列的主要表示。我目前对基本索引不感兴趣。
  • C 对于数组@Zephyr 是行主要排序的。我不确定你在问我什么。
  • visualizing the column major representation。第一个索引是有表格的页面,第二个是本页表格中的行,第三个是列
  • @PeterJ_01 但是在网站上的表示是不同的。它是
猜你喜欢
  • 2011-04-23
  • 2016-10-20
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多