静态变量static

Option Explicit
Dim i As Integer
Dim sum As Integer
Private Sub Command1_Click()
Cls
Font.Size = 70
Static i As Integer
i = i + 1
Print i
End Sub
Function f(x As Integer) As Long
    Dim i As Integer
End Function

### 静态变量 `static` 的可修改性及作用域规则 #### 可修改性 静态变量(无论是局部静态还是全局静态)在其生命周期内是可以被修改的。一旦初始化完成,静态变量在整个程序运行期间都会保留其值[^1]。对于局部静态变量而言,在每次调用函数时会保持上一次的值;而对于全局静态变量,则可以在同一源文件内的不同函数间共享并更新。 #### 行为特性 - **局部静态变量的行为** 定义于函数体内部的静态变量仅在第一次进入该函数时会被初始化,并且之后每一次重新进入此函数时都保存着上次退出前的状态。这种机制使得它可以用来记录某些累积状态或者计数器等功能。 - **全局静态变量的作用域限制** 当声明一个带有关键字 `static` 的全局变量时,它就变成了具有文件作用域而非真正的全局作用域。也就是说,这样的变量只能由同一个翻译单元(translation unit),也就是同一个`.c` 文件中的代码访问到,而无法通过外部链接让别的 `.c` 文件里的函数直接存取这个变量。 以下是展示如何定义和操作这两种类型的静态变量的例子: ```c // global_static.c #include <stdio.h> // 全局静态变量, 只能在本文件中使用. static int gs_counter = 0; void increment_global_static() { ++gs_counter; } int get_global_static_value() { return gs_counter; } // 局部静态变量演示 void local_static_example() { // 这是一个局部静态变量, 初始只会在首次调用时发生. static int ls_count = 0; printf("Local Static Count is %d\n", ++ls_count); } ``` 上述例子展示了两种形式的静态变量及其基本的操作方式。注意这里的 `gs_counter` 被标记为了 `static`, 所以即使提供了获取数值的方法 (`get_global_static_value`) ,也无法简单地从另一个编译单位(C source file) 中改变或读取它的实际内容。 #### 总结 综上所述,无论是在函数体内作为局部变量存在还是位于全局区域成为一种特殊用途的数据成员,带 `static` 关键字修饰符的变量都是可以被更改的实体对象。它们的主要区别在于生存时间和可见范围的不同设定上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值