二维数组按行存储和按列存储计算方法

108°C 28-12-2024 notbyai
最近更新于:2024-12-28 13:10:15

二维数组的基本结构

一个二维数组通常是逻辑上的一个矩阵。例如,a[m][n] 表示一个二维数组,包含 m 行和 n 列:

a[0][0], a[0][1], ..., a[0][n-1]
a[1][0], a[1][1], ..., a[1][n-1]
...
a[m-1][0], a[m-1][1], ..., a[m-1][n-1]

内存中的存储方式

  • 按行存储(Row-Major Order):一行中的所有元素按顺序存放在内存中,接着存放下一行。例如,a[0][0], a[0][1], ..., a[0][n-1], a[1][0], a[1][1], ...
  • 按列存储(Column-Major Order):一列中的所有元素按顺序存放在内存中,接着存放下一列。例如,a[0][0], a[1][0], ..., a[m-1][0], a[0][1], a[1][1], ...

按行存储

在按行存储中,元素是按行的顺序线性排列的。对于 a[i][j],其地址计算公式为:

公式
地址 = 基地址 + (i × n + j ) × 元素大小

解释

  • i 表示行号。
  • j 表示列号。
  • n 是列数(即每行的元素个数)。
  • 元素大小 是每个元素占用的字节数(例如 int 通常占 4 字节)。

示例:

假设有一个二维数组 a[3][4],按行存储,基地址为 1000,元素为 int 类型(每个占 4 字节)。访问 a[2][3] 的地址:

  1. 行号 i = 2,列号 j = 3,列数 n = 4
  2. 偏移量计算: (2 × 4 + 3) × 4 = 44 字节。
  3. 地址为:1000 + 44 = 1044

按列存储

在按列存储中,元素是按列的顺序线性排列的。对于 a[i][j],其地址计算公式为:

公式
地址 = 基地址 + (j × m + i) × 元素大小

解释

  • j 表示列号。
  • i 表示行号。
  • m 是行数(即每列的元素个数)。
  • 元素大小 是每个元素占用的字节数。

示例:

假设有一个二维数组 a[3][4],按列存储,基地址为 1000,元素为 int 类型(每个占 4 字节)。访问 a[2][3] 的地址:

  1. 列号 j = 3,行号 i = 2,行数 m = 3
  2. 偏移量计算: (3 × 3 + 2) × 4 = 44 字节。
  3. 地址为:1000 + 44 = 1044

对比总结

存储方式地址计算公式数据排列顺序
按行存储基地址 + (i × n + j ) × 元素大小按行连续存储:一行接一行
按列存储基地址 + (j × m + i) × 元素大小按列连续存储:一列接一列

评论留言

欢迎您,!您可以在这里畅言您的的观点与见解!

0 条评论