c++全局变量与静态变量「建议收藏」

c++全局变量与静态变量「建议收藏」概述:全局变量和和由static修饰的静态变量都被储存在全局数据区。全局数据区的内存在程序运行时会被全部置’0′.这不同于局部变量,局部变量在栈上分配内存,但此块内存一般不为零,且编译器不会在局部变量被声明的地方为其置’0′,除非申明时对其初始化值为0.全局变量:申明在main函数外的变量被编译器视为全局变量。即其在整个文件的任何地方都可以使用它。对于其他源文件来说,全局变量…

大家好,又见面了,我是你们的朋友全栈君。

概述:

全局变量和和由static修饰的静态变量都被储存在全局数据区。全局数据区的内存在程序运行时会被全部置’0′.这不同于局部变量,局部变量在栈上分配内存,但此块内存一般不为零,且编译器不会在局部变量被声明的地方为其置’0′,除非申明时对其初始化值为0.

 

全局变量:

申明在main函数外的变量被编译器视为全局变量。即其在整个文件的任何地方都可以使用它。

对于其他源文件来说,全局变量对其有可见性。即可以在其他源文件中通过包含此源/头文件然后通过extern关键字引用此全局变量。

静态变量:

静态变量在被申明在文件任何地方都会被视作静态变量(感觉是废话,嘻嘻),只要它被static关键字所修饰(好像还是废话)。而若想创建一个全局变量,其必须在main函数外和其他函数外被申明,否则它就不是全局变量了。

对于其他源文件来说,本文件的静态变量是不可见的,无法外部被引用。

但申明在本文件的哪个地方对本文件其他地方能否访问静态变量是有影响的。如果静态变量像全局变量一样被申明在所有函数之外,那么在本文件任何地方都能访问到此静态变量(当然要保证申明的地方在访问的地方之前)。如果静态变量被申明在某个函数中,那么在此函数外,此静态变量是不可访问的。这有点像局部变量,不过它是静态的。什么意思呢?举个例子,一个被申明在test()函数内部的局部变量a,在test()每次被调用时,都会在栈上被重新分配内存,test函数执行完毕时,a所代表的内存区域被释放。而如果a被申明为静态的。在test()第一次被调用时,编译器会在全局数据区为a分配内存,在test函数执行完毕后,a所代表的内存区域并不会被释放,它的值还是原来的值。在以后test()的每次调用都不会再理会a变量的申明语句(如” static int a; “),即使申明语句带有初始化性质(如” static int a=10 “)。

参考了:

https://blog.csdn.net/candyliuxj/article/details/7853938

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146133.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js android 换行符,JavaScript字符串换行符?

    js android 换行符,JavaScript字符串换行符?我刚刚用这段愚蠢的JavaScript测试了几个浏览器:functionlog_newline(msg,test_value){if(!test_value){test_value=document.getElementById(‘test’).value;}console.log(msg+’:’+(test_value.match(/\r/)?’CR’:”)+…

    2022年5月10日
    42
  • 树莓派python编程指南_树莓派python软件

    树莓派python编程指南_树莓派python软件一:格式化SD卡SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化(重装烧录也要进行着SD卡格式化操作)二:下载官方镜像http://downloads.raspberrypi.org/raspbian_latest三:烧录SD卡使用Win32DiskImager将镜像烧录到格式化后的SD卡SD卡盘根目录(/boot)下新建一个命名为ssh的…

    2022年10月15日
    2
  • python程序的热部署实现[通俗易懂]

    python程序的热部署实现[通俗易懂]pytho程序的热部署知乎上面的回答真正意义上的代码热部署应该是类似erlang那样的,将代码更新到节点后不停服务,不断连接的自动应用新代码。autoreload(代表django的autoreload)什么的还是会造成业务瞬间中断。我感觉是可以从wsgi容器级别上实现,比如更新代码后检测到文件变更,然后通知容器创建新的wsgiapplication的实例,之后所有新的请求都发送到新的wdgi…

    2022年5月11日
    40
  • Maven配置环境变量后不起作用的原因「建议收藏」

    Maven配置环境变量后不起作用的原因「建议收藏」Maven配置环境变量后不起作用的原因一.首先去maven官网下载maven相关文件点击左侧download选项选择图片中的Binaryziparchive apache-maven-3.8.1-bin.zip进行下载并解压到本地这个是解压后的文件二.配置环境变量1.添加MAVEN_HOME环境变量D:\Java\maven\apache-maven-3.8.12.添加M2_HOME环境变量(后面学习Spring会用到,可以先不进行配置)D:\Java\maven\apa

    2022年7月25日
    77
  • unity3D入门_unity怎么学

    unity3D入门_unity怎么学UnityShader中级(Unity2019unity教程初级中级高级扫码时备注或说明中留下邮箱付款后如未回复请加微信630105904联系本博主

    2022年8月10日
    7
  • 提交表单的4种方式_java自定义表单

    提交表单的4种方式_java自定义表单通用提交按钮–>2、提交3、说明:用户提交按钮或图像按钮时,就会提交表单。使用或都可以定义提交按钮,只要将其特性的值设置为“submit”即可,而图像按钮则是通过的type特性值设置为”image”来定义的。因此,只要我们单击一下代码生成的按钮,就可以提交表单。4、阻止表单提交只要在表单中存在上面列出的任何一种按钮,那么相应表单控件拥有焦点的情况下,按回车键就可以提交表单。如果表单里没有提…

    2022年9月1日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号