假设有一个二维数组`B[1..m, 1..n]`,采用行优先存储,每个元素占用`k`个存储单元。若已知元素`B[p, q]`的存储地址为`addr_pq`,且数组的首地址为`addr_base`,则元素`B[x, y]`的存储地址 `addr_xy` 可以表示为:
答案解析
选项 A 正确。首先,根据行优先存储,元素 `B[x, y]` 的地址相对于首地址 `addr_base` 的偏移量为 `((x-1)*n + (y-1))*k`。 其次,题目中 `addr_pq` 是已知的,那么该地址和首地址 `addr_base` 的偏移量是`addr_pq - addr_base`,这部分偏移量还可以表达为 `((p-1)*n + (q-1))*k`。那么,`addr_xy` 的偏移量 = `addr_pq` 的偏移量 - `((p-1)*n + (q-1))*k` + `((x-1)*n + (y-1))*k`。所以可以表达为 A。选项 B 错误,它将 `addr_pq - addr_base`放在了偏移量的计算中,造成重复计算;选项 C 忽略了已知元素地址 `addr_pq` 的信息,只考虑了相对于首地址的偏移量,无法利用已知条件;选项 D 错误的把`addr_pq`当成了 `addr_base` 。
正确答案:A