概述
static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。
但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。
在程序中使用static变量
1. 局部变量
普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。
普通局部变量存储于进程栈空间,使用完毕会立即释放。
静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
变量在全局数据区分配内存空间;编译器自动对其初始化
其作用域为局部作用域,当定义它的函数结束时,其作用域随之结束
小程序体会一下静态局部变量的威力:
#include <stdio.h> void fn(void) { int n = 10; printf("n=%d\n", n); n++; printf("n++=%d\n", n); } void fn_static(void) { static int n = 10; printf("static n=%d\n", n); n++; printf("n++=%d\n", n); } int main(void) { fn(); printf("--------------------\n"); fn_static(); printf("--------------------\n"); fn(); printf("--------------------\n"); fn_static();
//下面这句话,编译时报错, 说明静态局部变量无法在其他函数中进行引用
//printf("打印static n:%d\n", n); return 0; }
可见,静态局部变量的效果跟全局变量有一拼,但是位于函数体内部,就极有利于程序的模块化了。
---------------------