二维数组 A[m][n] 按行优先和按列优先的 下标地址转换公式

设二维数组 A[m][n] 按行优先存储, 每个元素占 p 个字节,

  则 Loc(i, j) 的地址为 (i * n + j) * p, 第 i 行前面有 i 行, 每行有 n 个元素, 加上 第 i 行的的 j 个元素,所以地址 为 (i * n + j) * p,

  1. 若 j 从下标 1 开始, 则 Loc(i, j) = (i * n + j - 1) * p

     第 i 行的 第 j 个元素,在第 i 行中 前面只有 j  - 1 个元素,

  2. 若 i 从下标 1开始, 则 Loc(i, j) = ((i - 1) * n + j) * p

  3. 若 i, j 均从 下标 1 开始, 则 Loc(i, j) = ((i - 1) * n + j - 1) * p

若该数组按列优先存储

  则 Loc(i, j) 为  (j * m + i) * p, 第 j  列前面有 j 列,每列有 m 个元素, 加上 第 j 列的 i 个元素,所以为 (j * m + i) * p

  1. 若 j 从下标 1 开始, 则 Loc(i, j) = ((j - 1) * m + i) * p;

    因为 第 j 列前面只有  (j - 1) 列

  2. 若 i 从下标 1开始, 则 Loc(i, j) = (j * m + i - 1) * p

    第 i 个元素前面实际上只有 i - 1 个元素

  3. 若 i, j 均从 下标 1 开始, 则 Loc(i, j) = ((j - 1) * m + i - 1) * p

总结:

  按行优先 Loc(i, j) = (i * n + j) * p, 按列优先 Loc(i, j) = (j * m + i) * p, 行从下标1 开始  i 就减一, 列从下标 1 开始 , j 就减一

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值