静态变量有两种:
文件作用域静态变量
文件作用域的静态变量定义在函数外,只能在当前文件内使用,不能在其他文件中使用。它的作用域是整个文件,存储在数据段或BSS段中。
示例代码:
static int i = 0; // 文件作用域静态变量
int main() {
// code
}
2. 函数作用域静态变量
函数作用域的静态变量定义在函数内,但其生命周期延长到整个程序结束。每次函数执行时,都会保持上一次执行时的值不变。存储在数据段或BSS段中。
示例代码:
void Func() {
static int i = 0; // 函数作用域静态变量
i++;
printf("%d\n", i);
}
int main() {
Func(); // Output: 1
Func(); // Output: 2
Func(); // Output: 3
return 0;
}
静态变量的作用域与生命周期不同于自动变量(局部变量)。静态变量在程序运行期间始终存在,一旦初始化后,其值不会被销毁。需要注意的是,静态变量使用不当可能会影响程序的效率和占用的内存空间。
函数作用域静态变量实际上是在函数作用域内定义的全局变量,只是作用域限制在该函数内部,不能被同一文件中其他函数调用,也不能被其他文件调用。
与普通全局变量不同的是,函数作用域静态变量只能在定义它的函数内进行访问,且在函数定义时就已经被初始化,而不是像普通全局变量需要被显式初始化或初始化值默认为0。
总之,函数作用域静态变量虽然在某种意义上类似于全局变量,但是它们仍然各自存在于各自的函数作用域中,生命周期也受到函数调用等限制。
————————————————
版权声明:本文为CSDN博主「嵌入式小宁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_53592457/article/details/131075902
|