前言
静态变量有一个特性,就是即使它们离开了它们的作用域,也会保留它们的值。因此,静态变量在其先前的作用域中保留其先前的值,在新的作用域中不会再次初始化。此刻,这句话听上去有些绕,请耐下心看完下面的内容,我相信读完后你会对这句话有更深的理解。
语法
static data_type var_name = var_value;
比较
- 一个
static
的int
变量在程序运行时时刻保持在内存中。普通变量或auto
变量在声明该变量的函数调用结束后被销毁。
例如,我们可以用static int
定义的变量来计算一个函数被调用的次数,但使auto int
不能这么使用。
#include<stdio.h>
int fun()
{
static int count = 0;
count++;
return count;
}
int main()
{
printf("%d ", fun());
printf("%d ", fun());
return 0;
}
output:
1 2
#include<stdio.h>
int fun()
{
int count = 0;
count++;
return count;
}
int main()
{
printf("%d ", fun());
printf("%d ", fun());
return 0;
}
output:
1 1
上面两个程序的结果说明,静态变量在其先前的作用域中保留其先前的值,在新的作用域中不会再次初始化。
2)static
变量(如全局变量)如果没有明确初始化,则默认为0。例如,在下面的程序中,x的值被打印为0,而y的值是一些随机值。
#include <stdio.h>
int main()
{
static int x;
int y;
printf("%d \n %d", x, y);
}
output:
0
22090
再次运行程序 output:
0
22089
第三次运行y打印的值仍与前两次不同,显然此处打印的y的值是没有意义的。
3)static
变量在数据段中分配内存,而不是堆栈段。
4)在c语言中static
变量只能使用常量进行初始化,但是在c++中无此限制。
参考资料:
https://www.geeksforgeeks.org/static-variables-in-c/