什么是块结构?


块是一条包含其自身局部数据声明的语句。块的概念起源于 ALGOL。块结构语言允许具有可调整长度的数组。块的主要特征是它们的括号结构(ALGOL 中使用的 begin 和 end),它们可以在其中定义其数据。在 'C' 语言中,块的语法如下:

{
   declaration statements;
}

其中花括号限定了块。块的特征是其嵌套结构。分隔符标记块的开始和结束。在 'C' 语言中,花括号 { } 充当分隔符,而 ALGOL 使用 begin 和 end。分隔符确保块彼此独立或嵌套在另一个块中。嵌套属性有时被称为块结构。

最紧密嵌套规则给出了声明的作用域:

  • 块 B 中声明的作用域包含 B。
  • 如果名称 x 用于块 B 但未在 B 中声明,则在封闭块 B 中使用 x 的声明位于封闭块 B' 中 x 的声明的作用域内,这样
    • B' 有 x 的声明,并且
    • B' 比任何其他包含 x 声明的块更紧密地嵌套在 B 周围。

考虑一个 C 程序:

使用堆栈执行上述块结构程序可以如下所示:

像 ALGOL 和 PL/I 这样的块结构语言允许可调整数组,即长度可变的数组。因此,它无法在激活记录之间存储不规则大小的数组。它可以在激活记录的一个角或固定大小数据之上分配灵活或可变数组。指向这些可调整数组的指针将存储在激活记录的固定位置。

块结构程序由嵌套过程组成。有时,过程引用未在其自身中声明的数据,即非局部数据。非局部数据在其激活记录中不可用。一个激活记录的非局部数据将存在于另一个过程的激活记录中。

有两种方法可以访问过程的非局部数据,如下所示:

  • **静态链接** - 在这种方法中,一个称为静态链接的指针附加到每个过程,该指针指向程序中物理上围绕该过程的最顶层激活记录。因此,任何过程的非局部数据引用都可以通过指针的下降链来找出所有静态封闭过程。

  • **显示** - 显示是一个指针数组,用于加快对非局部数据的访问。

更新于: 2021-11-08

7K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告