C 语言内部静态变量和外部静态变量的区别

2025年1月7日 | 阅读 4 分钟

在本文中,我们将结合示例讨论内部静态变量外部静态变量。但在讨论内部静态变量外部静态变量之前,我们必须了解 C 语言中的静态变量

静态变量

静态变量是一类在函数调用之间保持其值的变量。标准变量在每次调用函数时创建和销毁,而静态变量则在整个程序执行期间都存在。声明静态变量的关键字是“static”

静态变量有两种类型:内部外部静态变量。

内部静态变量

这些静态变量在函数内部使用static 关键字声明。它们的范围仅限于声明它的函数。它们不能从该函数外部直接访问或修改。它们也称为局部变量。

示例

让我们看一个 C 程序来演示内部静态变量。

输出

Differences between the Internal and external static variables in C

说明

在这个例子中,程序有两个函数:magicRoom()main 函数()。magicRoom 函数声明了一个名为 magicBox 的内部静态变量,并将其初始化为 5。

它会打印 magicBox 的值,并在 main 函数中调用 magicRoom 函数三次时对其进行递增。

内部静态变量的作用域仅限于 magicRoom 函数,这使得它被封装起来,无法从外部直接访问。当函数第一次被调用时,magicBox 的值为 5,然后进行递增。如果再次调用该函数,则会打印更新后的 magicBox 值并再次递增。

外部静态变量

C 语言中的外部静态变量也是用 static 关键字声明的,但它们是全局的。它们也可以从函数外部访问。这些变量在整个程序执行期间都会保留其值。

示例

让我们看一个 C 程序来演示外部静态变量。

输出

Differences between the Internal and external static variables in C

说明

在这个例子中,程序将说明外部静态变量的重要性。程序中有三个函数:mathClass()scienceClass()main 函数。在顶部声明了一个名为 globalMagicNumber 的外部静态变量,并将其初始化为 10。该变量可以在程序中的任何地方访问。因此,它在 mathClass 函数、scienceClass 函数和 main 函数中被打印。globalMagicNumber 的值在整个程序中都是相同的。

内部和外部静态变量之间的区别

Differences between the Internal and external static variables in C

内部外部静态变量之间存在一些区别。内部和外部静态变量之间的一些主要区别如下:

特性内部静态变量外部静态变量
声明位置在函数或块内部声明。在任何函数或块外部声明。
范围仅限于块或函数。在整个程序中可用。
函数内访问只能在同一个源文件中访问。程序中的所有函数都可以访问。
生命周期仅在函数执行期间存在。在整个程序执行期间存在。
数据隐藏将数据封装在特定的编译单元内。将数据封装在整个程序内。
内存分配在进入函数时分配一次。在程序初始化期间分配一次。
冲突风险函数内的命名冲突风险较低。与其他文件的命名冲突风险较低。
用例适用于临时或局部数据。适用于跨多个函数或文件共享的数据。
可重用性增强特定函数内的模块化增强模块化并支持更广泛的复用
函数间通信促进函数内的通信。促进函数之间或文件之间的通信。
编译单元鼓励创建自包含的单元。鼓励模块化和可重用的代码单元。
链接类型内部链接,仅在转换单元内可见。外部链接,可以被其他转换单元访问。

结论

两种类型的静态变量,内部和外部,服务于不同的目的。内部静态变量在函数内声明,封装数据并将其范围限制在函数内。它促进了模块化和数据隐藏。另一方面,外部静态变量在全局声明,允许在同一文件内的函数之间共享访问。