use*_*823 2 c static-variables
我正在研究静态变量,我在维基百科上看到了这段代码.static int x在整个程序中存储它的值.即使我们在全球范围内声明它,它也会存储以前的值.这是否意味着静态和全局变量被视为相同.如果不是,两者如何工作?
#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;
}
Run Code Online (Sandbox Code Playgroud)
说明符的static含义略有不同,具体取决于您使用它的位置.您有3个选项来声明一个变量,该变量的值在程序的整个生命周期中都要保留:
1)在static函数(即局部变量)中声明变量时,意味着在整个程序生命周期内,函数调用之间将保留其值.如果将变量初始化为某个值,则这是第一个函数调用时该变量的起始值; 所有后续函数调用都将保留变量的值而不是重新初始化.
2)当声明一个全局变量(没有说明static符)时,它的值在程序的整个生命周期中都被保留,就像它是一个局部静态变量一样,但区别在于全局变量是可见的(要读取和写入)通过该程序的任何文件的任何功能.
3)在声明全局static变量时,它的值在程序的整个生命周期中再次保留,但与普通全局变量相反,它只能由同一文件中的其他函数访问.
总之,所有这三类变量都保留了它们的价值; 区别在于它们的范围,意味着哪些函数可以访问此变量.
以下代码的所有3个变量在整个程序的生命周期内保留其值.
int x = 100; // visible to any function within any .c file of this program
static int y = 5000; // visible from any function within this .c
int func (int i)
{
static int z = 0; // invisible to all other functions
x += i;
y += i;
z += i;
return z;
}
Run Code Online (Sandbox Code Playgroud)
这里可以找到详尽的解释.