C语言static静态变量的用法(新手必看)
在 C 语言中,普通的变量也叫动态变量,默认有个保留字 auto,可以省略。
如果在变量前面增加一个 static 修饰符,那这个变量就成了静态变量。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,声明它的函数共享这个变量。
函数中的静态变量是静态局部变量,退出函数后不被释放,在程序运行结束时才释放。该变量只在函数中可使用,退出函数后就不能再使用,其生存期为整个源程序,但只能在定义该变量的函数内使用。
静态局部变量在编译时赋初值,且只赋一次,赋值语句在程序运行时不再运行。如果在定义局部变量时不赋初值,则对静态局部变量来说,编译时自动赋初值 0(对数值型变量)或空字符(对字符型变量)。
静态变量中所谓的静态,是指在程序运行的过程中,变量的内存地址始终不变,而不是其值不变。静态全局变量的作用域只在定义它的文件里,不能被其他文件使用。
static 修饰的静态变量有以下特征:
【实例】静态变量使用。
分别定义局部和全局静态变量的代码如下:
如果在变量前面增加一个 static 修饰符,那这个变量就成了静态变量。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,声明它的函数共享这个变量。
函数中的静态变量是静态局部变量,退出函数后不被释放,在程序运行结束时才释放。该变量只在函数中可使用,退出函数后就不能再使用,其生存期为整个源程序,但只能在定义该变量的函数内使用。
静态局部变量在编译时赋初值,且只赋一次,赋值语句在程序运行时不再运行。如果在定义局部变量时不赋初值,则对静态局部变量来说,编译时自动赋初值 0(对数值型变量)或空字符(对字符型变量)。
静态变量中所谓的静态,是指在程序运行的过程中,变量的内存地址始终不变,而不是其值不变。静态全局变量的作用域只在定义它的文件里,不能被其他文件使用。
static 修饰的静态变量有以下特征:
- 变量会被放在程序的数据区,在下一次被调用的时候还保持原来赋的值;
- 变量用 static 告知编译器,仅在变量的作用域内可用,这是其与全局变量的区别。
【实例】静态变量使用。
分别定义局部和全局静态变量的代码如下:
#include <stdio.h> int fun(void){ static int count = 3; //事实上此赋值语句从来没有执行过 return count--; } static int count = 1; //全局静态变量 int main(void) { printf("global\t\tlocal static\n"); for(; count <= 3; ++count) printf("%d\t\t%d\n", count, fun()); return 0; }编译运行,结果如下:
global local static 1 3 2 2 3 1