static的简单介绍

来源:互联网 发布:岂取之易守之难乎翻译 编辑:程序博客网 时间:2024/05/18 18:15
static静态全局变量与普通全局变量的区别


存储方式
:静态全局变量和普通全局变量都存储在静态存储区,属于静态存储方式。该区域中的数据在整个程序运行中一直占据内存空间。(属于静态存储方式的数据不一定是静态变量)
作用域:非静态全局变量作用域是整个源程序,在各个原文件中都有效。而静态全局变量只在定义该变量的源程序内有效。
再次,可以理解为,将全局变量改为静态变量是改变了他的存储方式,及改变了他的生存期。


static静态局部变量
它定义在函数的内部,只能在定义它的函数内部使用,不管函数是否被调用,他都一直存在,不随函数的结束而消失,并且再次调用时保持前次被调用留下的值。
如果函数体内定义静态局部变量时进行了初始化,以后程序不在进行初始化。
例如:


void fun(int a[10])
{
for (int i = 0; i < 9;i++)
{
static int b = a[i];
b+=10;
printf("%3d", b);
}
}
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
fun(a);
}




结果是11 21 31 41 51 61 71 81 91


当多次调用一个函数并且要求在调用之间保留某些变量的值时,可采用静态局部变量.
静态局部变量放在全局存储区,而不是像普通局部变量一样放在堆栈区。
注意:静态局部变量占用内存时间比较长,并且可读性差。