这是关于用汇编语言在嵌套数组中达到所需的索引。让我开始吧。
- 首先,我知道对于一个给定的数组“A”,你可以通过下式到达A[i][j];*A + i (C * K)+ j * K 假定C是数组中的元素编号。K是A中元素类型所需的字节。
所以这是有意义的。例如,你想到达int A[3][4] in A[5][5],你必须通过A中的3个数组。每个数组由4个元素组成,每个元素花费4个字节。因此;A + 3(4 * 5)+ 4 * 4。首先,你要遍历12个元素,在地址上遍历48个字节。然后,你在所需行的开头。然后,你跳过4个元素(16个字节)和所需列,换句话说,该行的第5个元素。
但是,我们在课堂上有一个例子,我完全不明白是怎么回事。我不能邮件老师,因为我知道这不会有任何结果。所以请帮助我理解这一点。
第一个
正如您所猜测的,我们需要回答M和N值。然而,如果我们调查上述之一,即[P + 8*],则M = 5,N = 7。(7*i + j)],那么8代表我们最开始定义中的K值。7代表C,它是A中数组所包含的元素数。因此,我认为应该是M = 7,N = 5,这与答案相反。
我是正确的,这只是一个错字或我错过了什么?
谢谢大家。
编辑:我有一个错字,而写作,感谢答案,它是纠正。
1条答案
按热度按时间enxuqcxy1#
例如,你想到达A[5][5]中的int A[3][4],你必须通过A中的3个数组。每个数组包含4个元素,每个元素占用4个字节。
不完全是。每个元素都由5个元素组成,因为它被声明为A[5][5]。
3和4是索引,5和5是大小。当计算偏移量时,你需要将外部数组中的 index 乘以内部数组的 size。这样做有意义吗?
编辑:公式A +
3 ( 4 * 4 ) + 4 * 4
是错误的。应该是A +3 ( 5 * 4 ) + 4 * 4
,因为内部数组的大小是5。这样得到的是A+76
。对于5x 5阵列,内存为:
所以为了得到元素[3,4],你必须跳过3complete子数组,每个子数组的大小为5*4字节,然后跳过第4个子数组中的4个元素。
编辑:关于一个4字节值的5x 5数组的玩具例子,现在来看看具体的问题。注意,它是一个8字节长的数组。因此,计算元素[i][j]在数组[A][B]中的偏移量的公式被重写为:
可以重写为
因此,通过计算出索引发生了什么,可以恢复数组的 * 第一 * 维。
现在,关于程序集片段。公式计算正确:到Q元素的偏移量是
8*(5*j + i)
,到P元素的偏移量是8*(7*i + j)
。我们注意到[A][B]
数组元素偏移量的一般公式根本不涉及B
的值。另外,我们注意到P声明为P[M][N]
,Q声明为Q[N][M]
--维度颠倒了。因此,P的第一维是7,Q的第一维是5。因此,N是,M是7。需要注意的是,在上面的片段中,M和N并不仅仅代表“第一维”和“第二维”,所以在一般公式中使用它们作为占位符会有一定的误导性。