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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Word2vec原理浅析及gensim中word2vec使用

    Word2vec原理浅析及gensim中word2vec使用本文转载于以下博客链接:Word2vec原理浅析:https://blog.csdn.net/u010700066/article/details/83070102;gensim中word2vec使用:https://www.jianshu.com/p/b779f8219f74如有冒犯,还望谅解!Word2vec原理浅析及tensorflow实现Word2Vec是由Google的M…

    2022年5月13日
    37
  • dubbo之9种rpc协议

    dubbo之9种rpc协议本文章来源于:https://github.com/Zeb-D/my-review,请star强力支持,你的支持,就是我的动力。[TOC]背景只要涉及通信(大多数是进程通信)就需要通信协议,那么可能要将我们眼里的对象(字符流)按照一定的协议进行字节流通信;那么作为有名rpc框架之一dubbo支持的rpc协议是支持多种配置的;Dubbo支持dubbo、rmi、hessian、htt…

    2022年5月19日
    116
  • PyCharm激活码永久有效PyCharm2020.2.4激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2020.2.4激活码教程-持续更新,一步到位PyCharm激活码永久有效2020.2.4激活码教程-Windows版永久激活-持续更新,Idea激活码2020.2.4成功激活

    2022年6月19日
    34
  • mysql怎么删除默认值_MySQL删除字段

    mysql怎么删除默认值_MySQL删除字段需求:为已有添加字段示例:1.查看先有表结构2.为t_test表添加字段nickname语法:ALTERTABLE表名ADD字段名字段类型ALTERTABLEt_testADDnicknamevarchar(25)COMMENT‘昵称’;3.为t_test表添加字段age,并设置默认值为20ALTERTABLEt_…

    2022年9月26日
    2
  • 无锁编程CAS[通俗易懂]

    无锁编程CAS[通俗易懂]前言CAS(CompareAndSwap,比较并交换),要说CAS是无锁编程,多多少少有些“标题党”的感觉。因为CAS根据其设计思想,可以划分为乐观锁。不同于synchronized关键字,synchronized实现的是悲观锁。我第一次听说乐观锁和悲观锁的时候有点震惊:一把锁我还得知道它乐不乐观?乐不乐观?一把锁难道还有情绪?实际上乐观锁和悲观锁是基于线程并发竞争的角度来说的,悲观锁就是…

    2022年6月10日
    42
  • javaweb-springMVC-54

    javaweb-springMVC-54

    2021年5月18日
    155

发表回复

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

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