static疑惑

kmsch 2015-02-02 12:48:50
如果在函数内声明初始static变量,只会在第一次调用时才会执行,可是如果是全局变量(global),static变量与普通的变量有什么不同呢?他们都是伴随整个程序
...全文
158 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmsch 2015-02-04
  • 打赏
  • 举报
回复
明白,谢谢!
百曉生 2015-02-03
  • 打赏
  • 举报
回复
我记得static变量好像是和全局变量分配在相同区域的内存,而他们和普通变量所在的内存区域不同
qq1415388528 2015-02-03
  • 打赏
  • 举报
回复
静态全局变量只能在本.cpp中使用,而全局可以在任何的.cpp中使用。
kmsch 2015-02-02
  • 打赏
  • 举报
回复
引用 1 楼 lincolnandlinda 的回复:
个人认为两者的作用域有大差别:全局变量在整个应用范围内有效,而static 变量仅在它的Block范围内有效. 出了这个范围, 所有的引用都是非法.
全局的静态变更与普通变量是不是是一样的? static int a = 1; 与 int a =1; 上面两条语句如果是在全局声明区,是不是一样的呢?
lincolnandlinda 2015-02-02
  • 打赏
  • 举报
回复
个人认为两者的作用域有大差别:全局变量在整个应用范围内有效,而static 变量仅在它的Block范围内有效. 出了这个范围, 所有的引用都是非法.
bear234 2015-02-02
  • 打赏
  • 举报
回复
static这个东西,就一个作用:把被它修饰的东西和这个东西所在的文件绑起来 或者绑在整个文件里,或者绑在该文件的某个函数里 被static修饰的数据的生存期都和文件相关 不和函数相关
ooolinux 2015-02-02
  • 打赏
  • 举报
回复
除了作用域,static变量分配在静态/全局内存具有和全局变量一样的生存期,普通的变量(就是auto类型,这个关键字毫无意义)分配在栈上,函数返回后变量就不存在了,栈的大小有限,普通变量不能申明很大的数组什么的,不然栈溢出程序错误。
greex 2015-02-02
  • 打赏
  • 举报
回复
访问方式不同。static对像只有一份实像。其它对像可以有多份出来,如对定义它的类再进行new操作。
sg_knight 2015-02-02
  • 打赏
  • 举报
回复
作用域不同。
赵4老师 2015-02-02
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
幻夢之葉 2015-02-02
  • 打赏
  • 举报
回复
局部静态变量只能在函数或者块中可见(生命周期是定义到程序结束),你只能在可见域中使用,函数返回后不会被销毁,如果你某个指针指向该内存,在其他范围可用而不会引起错误或崩溃! 全局的参考楼上!!
encoderlee 版主 2015-02-02
  • 打赏
  • 举报
回复
楼上正解,全局变量如果不加static,那么经过声明以后,可以在任何一个cpp文件中使用, 全局变量如果加了static,那么只能在定义它的cpp文件中使用。
jiht594 2015-02-02
  • 打赏
  • 举报
回复
非静态全局变量可以在所有源文件里调用 静态全局变量只能在本文件里调用,不允许在其他文件里调用

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧