【发布时间】:2014-01-10 16:18:41
【问题描述】:
我在 C 语言中有这个编码问题,我无法完全弄清楚逻辑。我有一个 3D 数组:
a[2][3][2] = {{{a1,b1},{a2,b2},{a3,b3}},{{c1,d1},{c2,d2},{c3,d3}}};
现在如果我写 a[1][0]-a[0][0] 那么 a[1][0] 指向的内存位置第二个子集的第一个元素(我不知道这里的正确术语到底是什么),即 {c1,d1} 的起始位置(我希望这是正确的?)。类似地,a[0][0] 指向第一个子集的第一个元素的起始地址,即 {a1,b1}。
所以从这个意义上说,如果我写 a[1]-a[0] 那么它应该指向第一个子集的起始位置,即 {{a1,b1},{ a2,b2},{a3,b3}} 和第二个子集 {{c1,d1},{c2,d2},{c3,d3}} 的起始位置在我的意见应与 a[1][0]-a[0][0] 相同。
但是,当我打印这两个值时,第一个值为 6,第二个值为 3。我的逻辑到底哪里出错了?
【问题讨论】:
-
由于这是一个 3D 数组,您提供的 none 表达式根本不会修改数组(除了初始化程序)。
a[1][0] - a[0][0]不修改任何内容,而是执行类型化地址差异表达式。就个人而言,在解决这个问题之前,我会掌握一维和二维算术。 -
6和3从何而来?它们是分配给变量 a1、a2、... 等的值吗?
-
@WhozCraig- 但我从未说过该操作正在修改任何内容。谢谢你的建议,我正在努力。 :)
标签: c arrays pointers pointer-arithmetic multidimensional-array