数组说明翻译

数组说明 → 填 符号表 + 建 内情向量表

  • 符号表记录数组名、类型、内情向量表指针
  • 内情向量表(dope vector)记录:维数、各维上下界、各维长度、元素类型宽度、数组首地址

示例:int arr[3][4] 的内情向量表

数组名: arr
首地址: A₀
元素宽度: 4 (sizeof int)
维数: 2
第1维: [0..2], 长度=3
第2维: [0..3], 长度=4

重点 数组说明涉及符号表和内情向量表两块内容。

数组元素引用翻译

翻译数组引用时需完成:

  1. 类型检查:元素类型与上下文要求一致
  2. 下标越界检查:生成运行时的越界检测代码
  3. 地址计算:根据存储方式计算偏移量

行优先 vs 列优先

  • 行优先(Row-major):按行顺序存储,先存完一行再存下一行(C 语言)
  • 列优先(Column-major):按列顺序存储,先存完一列再存下一列(Fortran)

对于数组 ,元素

  • 行优先偏移
  • 列优先偏移

N 维数组地址公式

重点 数组地址公式 必须掌握。

设数组 ,元素宽度为 ,下标从 开始简化:

行优先

可变部分 + 不变部分

  • :含下标变量的项(如
  • :含下界偏移的常数项
  • 编译时计算 ,运行时计算

示例: 的地址(行优先,宽度

其中

动态数组

  • 编译时:分配符号表 + 内情向量表空间,记录维数信息
  • 运行时:根据实际维界计算数组体积,分配存储空间

动态数组的地址计算中, 等值为运行时确定,不可在编译时预先计算。