static有两种用法:
1、在文件中定义;
如 a.c
static int flag;
void func()
{
//...
}
在这种情况下,主要的作用是说明flag是a.c的私有变量,不在a.c这个文件的其它函数不能访问flag.
2.在函数定义
这主要是说明变量是在堆中定义,如
void func()
{
static int flag;
//...
}
这样的话,函数的值可以反复的被func引用(其它函数也可以使用flag)。
由于flag是在堆中定义的,所以如果传出它的地址,如:
int * func()
{
static int flag;
//...
return &flag;
}
main()
{
int *pi=func();
*pi=1;
}
这样也是可以的,但不推荐。
全局变量也没什么好说的,注意如果全局变量和你的局部变量重名的时候,
函数使用变量名满足近邻原则。
如:
int flag; // in some head file
extern int flag; //in a.c
void func()
{
int flag; //1
flag=1;
if(flag)这个flag用的是 //1处定义的flag
//...
1、在文件中定义;
如 a.c
static int flag;
void func()
{
//...
}
在这种情况下,主要的作用是说明flag是a.c的私有变量,不在a.c这个文件的其它函数不能访问flag.
2.在函数定义
这主要是说明变量是在堆中定义,如
void func()
{
static int flag;
//...
}
这样的话,函数的值可以反复的被func引用(其它函数也可以使用flag)。
由于flag是在堆中定义的,所以如果传出它的地址,如:
int * func()
{
static int flag;
//...
return &flag;
}
main()
{
int *pi=func();
*pi=1;
}
这样也是可以的,但不推荐。
全局变量也没什么好说的,注意如果全局变量和你的局部变量重名的时候,
函数使用变量名满足近邻原则。
如:
int flag; // in some head file
extern int flag; //in a.c
void func()
{
int flag; //1
flag=1;
if(flag)这个flag用的是 //1处定义的flag
//...
}
Static 变量是静态局部变量,虽然在被调用后他的值依然不便但是其他函数不能引用它,而全局变量是所有函数都可以调用的。
另外;static的全局变量只能在该文件中使用,就算其它文件用extern来声明也
不能用,而没用static定义的全局变量在外部文件中可以通过extern来声明引用它