静态变量具有即使在超出其范围之后也能保留其值的属性!因此,静态变量保留其先前作用域中的先前值,并且不会在新作用域中再次初始化。
句法:

static data_type var_name = var_value;

以下是关于C中静态变量的一些有趣事实。

1)程序运行时,静态int变量保留在内存中。当声明变量的函数调用结束时,将销毁normal或auto变量。

例如,我们可以使用static int来计算调用函数的次数,但是不能为此目的使用auto变量。

例如下面的程序打印“1 2”

    
#include<stdio.h>
int fun()
{
  static int count = 0;
  count++;
  return count;
}
 
int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

输出:

1 2

但是下面的节目打印1 1

#include<stdio.h>
int fun()
{
  int count = 0;
  count++;
  return count;
}
 
int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

输出:

1 1

2)静态变量在数据段中分配内存,而不是堆栈段;

3)如果未明确初始化,静态变量(如全局变量)将初始化为0。例如,在下面的程序中,x的值打印为0,而y的值是垃圾。有关详细信息,

#include <stdio.h>
int main()
{
    static int x;
    int y;
    printf("%d \n %d", x, y);
}

输出:

[some_garbage_value]

4)在C中,静态变量只能使用常量文字进行初始化。例如,以下程序在编译时失败。有关详细信息,请参阅

#include<stdio.h>
int initializer(void)
{
    return 50;
}
 
int main()
{
    static int i = initializer();
    printf(" value of i = %d", i);
    getchar();
    return 0;
}

产量

 在功能'main'中:
9:5:错误:初始化元素不是常量
     static int i = initializer();
     ^

请注意,这种情况在C ++中不成立。因此,如果您将程序保存为C ++程序,它将编译\并运行正常。

 

5)在C / C ++中也可以使用静态全局变量和函数。这些的目的是将变量或函数的范围限制为文件。有关详细信息,请参阅C中的静态函数。

C中的静态变量-IDC帮帮忙