CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

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

楼主qianqiansong(就是不说)2002-04-01 00:57:38 在 C/C++ / C语言 提问

谢谢 问题点数: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

相关问题

  • c#中怎样设置全局变量。
  • c#如何定义全局变量?
  • C++ 的全局变量问题!
  • static 全局变量问题?求助!!!
  • 在c语言里,全局变量是不是静态变量
  • C中有没有全局变量和静态全局变量的说法?
  • 全局变量
  • 全局变量!!
  • 全局变量
  • 全局变量?

关键词

  • 函数
  • 文件
  • 变量
  • 调用
  • 定义
  • 全局
  • 局部变量
  • flag
  • pch
  • 引用

得分解答快速导航

  • 帖主:qianqiansong
  • frogking1
  • x_zj
  • aree
  • ly_blue
  • piaorenqian
  • hcpp
  • fayekiss

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo