全部博文(73)
分类: C/C++
2009-04-23 17:15:10
静态变量
http://blog.csdn.net/hangmwll/archive/2009/02/10/3874215.aspx
静态变量存放在内存中的静态存储区。编译系统为其分配固定的存储空间。静态变量定义的形式是:
static 类型标识符 变量名;
静态变量有两种:一种是外部静态变量,另一种是内部静态变量。
(1)外部静态变量。如果希望在一个文件中定义的外部变量的作用域仅局限于此文件中,而不能被其它文件所访问,则可以在定义此外部变量的类型说明符的前面使用static关键字。如:
static float f;
此时,f被称为静态外部变量(或称为外部静态变量),只能在本文件中使用,在其它文件中,即使使用了extern说明,也无法使用该变量
static int x, y;
/*x与y只是适用于本文件的全局变量*/
#include
main()
{
scanf("%d%d",&x,&y);
swap();
printf("x=%d, y=%d\n",x,y);
}
/*file2.c*/
extern int x, y;
/*
swap()
{
int t;
t=x; x=y; y=t;
return;
}
这一程序是错误的。这是因为,在主函数所在的文件file1.c中定义的全局变量x、y只适用于本文件,而在函数swap(
)所在文件file2.c中试图将它们说明为外部变量而使用它们,这是不可能的。因此,上述程序在编译连接时会指出x、y没有定义的错误。
内部静态变量。如果希望在函数调用结束后仍然保留函数中定义的局部变量的值,则可以将该局部变量的类型说明符前加一个static关键字,说明为内部静态变量。
例8.35 编一个程序,每调用一次函数,显示一静态局部变量中内容,然后为其值加2。
#include
void test_static()
{
static int sv=0;
printf("static=%d\n",sv);
sv=sv+2;
}
main()
{
int i;
for(i=0;i<4;i++)
test_static();
}
static=0
static=2
static=4
static=6
test_static( )函数中,静态变量sv的初始值为0。但是只有在test_static( )函数第一次调用执行时sv被初始化为0,以后每次调用就不再进行初始化,而把上次的计算结果作为初始值 ,因此,两次相同的调用出现不同的计算结果。如果将sv定义为动态变量,就会出现不同的结果
#include
void test_static()
{
int sv=0;
printf("static=%d\n",sv);
sv=sv+2;
}
main()
{
int i;
for(i=0;i<4;i++)
test_static();
}
static=0
static=0
static=0
static=0
注意:
静态变量如果在定义时没有赋初始值,系统会用默认值对它进行初始化,数值变量默认初始化为0,字符变量默认初始化为空字符(即ASCII码为0的字符)