现在的位置: 首页 > 综合 > 正文

c语言中Static 变量与全局变量有什么区别?

2013年08月25日 ⁄ 综合 ⁄ 共 1052字 ⁄ 字号 评论关闭

c语言中Static 变量与全局变量有什么区别?

=====================================
Static 变量是静态局部变量,虽然在被调用后他的值依然不便但是其他函数不能引用它,而全局变量是所有函数都可以调用的。

========================================================
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
//...
}

====================================
其它函数也可以使用flag,对于这句话我有点疑问,据我所知,函数内部用static定义的变量也不能被其他的函数调用,你能具体解释一下吗?

 
 
你说的很对,其他函数是不能调用别的函数内部定义的static变量,对于函数内部定义的static变量,当该函数下次被调用时,static定义的变量的值不重新被初始花为某值,而是在上一次函数调用时而产生的static 变量基础上对static进行运算。

======================================

Static 变量是静态局部变量,虽然在被调用后他的值依然不便但是其他函数不能引用它,而全局变量是所有函数都可以调用的。
另外;static的全局变量只能在该文件中使用,就算其它文件用extern来声明也
不能用,而没用static定义的全局变量在外部文件中可以通过extern来声明引用它

抱歉!评论已关闭.