我知道声明为 static
的变量只在声明它的文件中有范围,而声明没有 static
的变量可以从其他文件使用外部声明。
但是static
“全局”是不是真的是为了让变量保留上次赋值。喜欢静态本地目的吗?
#include <stdio.h>
void func() {
static int x = 0; // x is initialized only once across three calls of func()
printf("%d\n", x); // outputs the value of x
x = x + 1;
}
int main(int argc, char *argv[]) {
func(); // prints 0
func(); // prints 1
func(); // prints 2
return 0;
}
最佳答案
“保持最后的值(value)”这个词让你感到困惑。术语“维护最后一个值”将用于函数局部变量与函数静态变量的上下文。因为在函数中声明的变量存储在堆栈中,并且在退出函数时将清除该函数使用的堆栈,从而使变量失效。
但是用 static 创建一个函数局部变量是在 RAM 中创建一个内存(而不是在堆栈中),这允许内存甚至在函数退出后保留。甚至全局变量和文件静态变量都存储在 RAM 中,从而永远保留其值。
因此,对于您的问题,存储在 RAM 中的任何变量都将“保持其最后的值”,而不管其关键字 static 是什么。但是 static 限制了它的使用范围,即,如果在文件范围内声明,那么它可以在文件内使用(访问),如果在函数范围内声明,那么它的范围仅限于函数内。
关于c - 什么是静态全局变量目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116572/