声明全局变量和静态变量

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)

Mic*_*sch 8

说明符的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)

这里可以找到详尽的解释.