c语言中Static 变量与全局变量有什么区别?
谢谢 问题点数:100、回复次数:14Top
1 楼frogking1(薛丁谔的猫)回复于 2002-04-01 01:06:26 得分 10
Static 变量是静态局部变量,虽然在被调用后他的值依然不便但是其他函数不能引用它,而全局变量是所有函数都可以调用的。Top
2 楼x_zj()回复于 2002-04-01 06:39:33 得分 20
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
//...
}
Top
3 楼aree(开路先锋)回复于 2002-04-01 08:25:34 得分 20
Static 变量 会在过程调用完后自动消失Top
4 楼ly_blue(blueskylove)回复于 2002-04-01 08:39:50 得分 10
给 x_zj()
其它函数也可以使用flag,对于这句话我有点疑问,据我所知,函数内部用static定义的变量也不能被其他的函数调用,你能具体解释一下吗?Top
5 楼piaorenqian(湖心孤舟)回复于 2002-04-01 08:47:19 得分 20
回复人: ly_blue(ly_blue) ( ) 信誉:100 2002-04-01 08:39:00 得分:0
给 x_zj()
其它函数也可以使用flag,对于这句话我有点疑问,据我所知,函数内部用static定义的变量也不能被其他的函数调用,你能具体解释一下吗?
你说的很对,其他函数是不能调用别的函数内部定义的static变量,对于函数内部定义的static变量,当该函数下次被调用时,static定义的变量的值不重新被初始花为某值,而是在上一次函数调用时而产生的static 变量基础上对static进行运算。
Top
6 楼hcpp(简单的才是美的)回复于 2002-04-01 08:51:07 得分 10
difference:
Local static various have fuction scope,but globes have globe scope.
the same:these all store in globe data section.Top
7 楼fayekiss(磊磊)回复于 2002-04-01 17:16:58 得分 10
在类中,private 中定义的内部变量,可以在外部访问.Top
8 楼x_zj()回复于 2002-04-01 18:11:03 得分 0
to: ly_blue(ly_blue)
看下面的例子:
char *getname(char *name)
{
static szName[80];
strcpy(szName,name);
return name;
}
//不推荐以下用法
main()
{
char *pch;
puts(getname("hello"));
puts(getname("hi!"));
//甚至可以
strcpy(pch,"WOW!");
puts(pch);
return 0;
}
Top
9 楼x_zj()回复于 2002-04-01 18:17:44 得分 0
当然,由于编译器对于安全的设计,strcpy(pch,"WWW")有时会出core,
这只是说明一个问题而已Top
10 楼x_zj()回复于 2002-04-01 18:25:34 得分 0
补充一点:
pch=getname("xxx");Top
11 楼xbnet()回复于 2002-04-01 18:49:58 得分 0
Static 变量是静态局部变量,虽然在被调用后他的值依然不便但是其他函数不能引用它,而全局变量是所有函数都可以调用的。
另外;static的全局变量只能在该文件中使用,就算其它文件用extern来声明也
不能用,而没用static定义的全局变量在外部文件中可以通过extern来声明引用它
Top
12 楼mcathrtyj(cat)回复于 2002-04-01 18:52:10 得分 0
應該把基礎知識好好學習Top
13 楼qianqiansong(就是不说)回复于 2002-04-03 03:43:59 得分 0
我是初学者,谢谢大家的帮助Top
14 楼benben119()回复于 2002-04-03 09:49:02 得分 0
如果我没记错的话,全局变量是再整个文件中都可被调用的,其他文件也可通过extern 调用,其植可被任意改变(危险,慎用),而静态变量不同,他只有在进入他的有效作用域中才有效,才可以改变其值。用那种定义那也的具体情况具体分析。Top




