如果所有的变量按照下面的程序进行定义和声明,那么在main()函数中所有可用的变量为 ()。
void fun(int x)
{static int y;……return;
}
int z;
void main( )
{int a,b;fun(a);……
}
A.x,y
B.x,y,z
C.a,b,z
D.a,b,x,y,z
static静态变量的值在函数调用结束后会保持
x为static存储类型,只初始化一次,且生存期是整个和程序相同的,即函数推出后x的值也不改变,下次调用时继续保持的
**静态变量(Static Variable)**在计算机编程领域指在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量。与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。
局部变量(Local Variable):定义在函数体内部的变量,作用域仅限于函数体内部。离开函数体就会无效。再调用就是出错。
全局变量(Global Variable):定义:所有的函数外部定义的变量,它的作用域是整个程序,也就是所有的源文件,包括.c和.h文件。
(函数体外只能进行初始化,不能进行赋值运算)
全局变量全部存储在静态存储区。在程序开始执行过程中给全局变量分配空间,程序执行完毕就释放空间。程序执行过程中固定的分配空间,而不需要动态进行分配是释放。
动态存储区主要存放以下数据:函数的形参、自动变量==(没有加static的局部变量)==、函数调用的现场现场保护和返回值。
动态存储区的数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。
auto 变量:
函数中的局部变量,如果不专门的声明为 static存储,都是动态分配存储空间。数据存储在动态存储区内。函数中的形参和函数中的变量都属于此类,调用该函数时候系统自动的分配空间,在函数结束的时候,释放该空间。这些局部变量被称为自动变量。自动变量用 auto关键字声明(可以省略auto )。
static 变量:
有时候希望我们调用的函数在释放的时候不消失能保留原值,这就需要定义为静态局部变量。用关键字 static声明。
参考:https://blog.csdn.net/u013355826/article/details/53224303