C 语言中的作用域

本文内容

目录汇总:C 语言零基础入门教程

在 C 程序中,相同的标识符可以有不同的含义。C 语言的作用域规则使得程序员(和编译器)可以确定与程序中给定点相关的是哪种含义。

下面是最重要的作用域规则:当程序块内的声明命名一个标识符时,如果此标识符已经是可见的(因为此标识符拥有文件作用域,或者因为它已在某个程序块内声明),新的声明临时“隐藏”了旧的声明,标识符获得了新的含义。在程序块的末尾,标识符重新获得旧的含义。

思考下面这个(有点极端的)例子,例子中的标识符 i 有 4 种不同的含义。

  • 在声明 1 中,i 是具有静态存储期和文件作用域的变量。
  • 在声明 2 中,i 是具有块作用域的形式参数。
  • 在声明 3 中,i 是具有块作用域的自动变量。
  • 在声明 4 中,i 也是具有块作用域的自动变量。

作用域

一共使用了 5 次 i。C 语言的作用域规则允许确定每种情况中 i 的含义。

  • 因为声明 2 隐藏了声明 1,所以赋值 i = 1 引用了声明 2 中的形式参数,而不是声明 1 中的变量。
  • 因为声明 3 隐藏了声明 1,而且声明 2 超出了作用域,所以判定 i > 0 引用了声明 3 中的变量。
  • 因为声明 4 隐藏了声明 3,所以赋值 i = 3 引用了声明 4 中的变量。
  • 赋值 i = 4 引用了声明 3 中的变量。声明 4 超出了作用域,所以不能引用。
  • 赋值 i = 5 引用了声明 1 中的变量。

请参阅

(完)

comments powered by Disqus

本文内容