C语言 static变量
在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。局部静态变量和全局变量一样存储在静态存储区。
1.静态变量的定义形式
static数据类型变量表列;
2.说明
(1)静态内部变量属于静态存储方式。在函数体内定义的静态变量,即便所在函数调用结束也不释放。也就是说,静态内部变量在程序执行期间始终存在,它的生存期为整个程序。不过,其他函数是不能引用不属于自己的静态变量的。
(2)和auto变量一样,静态变量也允许初始化,初始化形式为:
static数据类型变量1=初值,变量2=初值,…;
例如:
static long s=l;
(3)静态变量如果定义了但没有初始化,系统会对它自动赋以"0"(整型和实型)或"\0"(字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值。
3.静态全局变量
C语言中,也可以在一个全局变量的定义前面加static修饰,但此处的static与静态局部变量的static的意义不一样:
© static加在局部变量前,其含义是让一个变量存储在静态存储器中,保证函数执行结束时不释放该变量。
© static加在全局变量前的含义是告知编译器,这个全局变量仅在本文件中可用,不能被其他文件调用。
一个C语言源程序可以由多个源文件(.c)组成。在一个源文件中定义的全局变量(外部变量)可以被本程序中的每个源文件使用。但如果在全局变量的前面再加static标识符,就构成了静态的全局变量,这样的全局变量的作用域只在本文件内部。
说明:
即便是不加static修饰符,全局变量也是存储在静态数据区,它的生命期是整个程序执行期间。当程序执行完毕时,全局变屋才会被释放。当全局变量加上static修饰符时,只是限制了全局变量的作用域只局限在定义它的源文件内,程序中的其他源文件不能使用。例如:
file1.c中:
static int I;
float y;
void fun()
{
…
}
main()
}
…
}
file2.c
main()
{
extern float y;
…
Y-a+b;
…
}
程序中,file1中定义了两个全局变量,其中i为静态型,不能被別的文件所调用,y可以被其他文件调用,调用时要用extern进行声明,表明是一个外部变量。
静态全局变量可以避免其他模块对全局变量的调用,防止出现错误,同时也降低了模块之间的耦合度。
点击加载更多评论>>