在Row-Major中保存数组并查找一个元素的地址?

时间:2016-04-27 13:35:20

标签: arrays math matrix multidimensional-array data-structures

我从之前的博士入学考试中遇到了多项选择题,如下:

如果A [4] [5]的地址在内存中为1000,并且方法是行主要的,则在上三角A [1..6,1 ...上的A [2] [3]的地址是什么。 6]?每个项目有2个字节。

我的解决方案是:

A[4][5]= x + [ (4-1)*6 + (5-1)] * 2 = 1000 ---> x= 1000-40=960.  so
 A[2][3] = 960 + [ (2-1)*6 + (3-1)] * 2 = 976 !!

但我的解决方案不在答题纸的选项中。哪里错了?谁能说出来?

A)1016
B)982
C)984
D)1018

1 个答案:

答案 0 :(得分:1)

你不需要起始地址来解决这个问题,所以不要打扰x是什么。

我们在A [4] [5]的地址1000。因此,元素的地址是:

A[4][4] : 998
A[4][3] : 996
A[4][2] : 994

使用这个简单的逻辑,我们可以找到A [2] [3]的地址。

现在从可用选项中看到,唯一正确的选项似乎是B,似乎数组的索引从1开始而不是0 ,并包含主对角线。

所以我们将返回9个位置,因此正确的选项是B。

<强>解释

因为包含了主对角线,所以我们在第4行返回1个位置。在第3行返回4个位置,在第2行返回4个位置。因此,返回的总位置是9,因为每个元素需要2个字节,所以正确的答案是 1000 - 9 * 2 = 982