繁体   English   中英

关于静态变量的混淆

[英]confusion about static variables

我对静态整数的概念感到困惑。当我在main函数中初始化一个静态整数时

static int i;

现在,静态整数被赋值为0.现在下一步:

i++;

我变成了1。

现在程序终止了。 我想知道在下一次运行中会产生什么程序。 此外,如果整个程序关闭会发生什么? 我明白第一行是静态int i; 因此,下次运行该函数时的下一个值应保留i先前运行时的值。 如果是这样,变量静态的优势是什么? 变量是否有时间限制,还是可以永久存储? 如果我再次运行该功能会有什么价值?

在C中,“static”表示变量在全局存储中具有局部范围。

C中的变量范围是一个块。 换句话说,变量可以在声明它们的块内使用。 通常他们只是保持他们的价值直到阻止结束,之后就会丢失。 例:

{
   int a; 
   // Only a can be used here
   {
      int b;
      // a and b can be used here
      {
         int c;
         // a,b and c can be used here
      }
      //just a and b can be used here. c is not available anymore
    }
    // only a can be used here. Neither b nor c are available anymore
 }

除了可以在整个程序中使用的全局变量之外,这是正确的。

另一个例外是静态变量。 它只能在块内部看到,但在块结束后保持其值。

这意味着如果在函数内部声明一个静态变量,它将在函数调用之间保持其值。

例如,下面的函数有一个局部变量。 局部变量具有块的范围(这意味着您只能访问它声明的块{}内的变量'var',在函数内部的情况下):

void countFunction(void)
{
  int var = 0;
  var = var + 1;
  printf("Value is %d\n", var);
}

一旦变量不是静态的,每次调用函数时它都会打印“Value is 1”,因为变量存储在函数调用中分配的堆栈中,并在函数返回后释放。

如果将var更改为静态,

void countFunction(void)
{
  static int var = 0;
  var = var + 1;
  printf("Value is %d\n", var);
}

第一次调用函数var时,将初始化为0,函数将显示“Value is 1”。 然而,在第二次,var将已经分配到全球区域。 它不会再次初始化,函数将显示“Value is 2”。

这在程序执行中。

虽然只要程序执行就会分配静态变量,但是在程序完成后它不会保留其值(程序将释放所有内存)。 为下次运行保留任何值的唯一方法是将其存储在非易失性介质(如磁盘)中。

希望能帮助到你。

它将再次为0 ,因为程序终止时所有内存/变量都将丢失。

那么让它静止的优势是什么?

只要你不终止你的程序就很有用:)例如,如果在该函数中使用静态变量并在每次调用时递增它,它可以用来计算调用函数的次数。 这只是一个简单的例子,但当然可以有更实际的用途。

更多读物:

C静态变量

下次启动应用程序时, i的值将为0。 inialization为0是在程序启动时发生的默认的inialization(在C的其余部分非常罕见)。

你怎么想象它会被存储在执行之间的任何地方? 每当您的应用程序终止时,操作系统都会回收它的内存。 因此,存储i的内存块也会丢失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM