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


相关推荐

  • rsync+inotify自动进行同步

    rsync+inotify自动进行同步

    2021年5月31日
    97
  • java400报错[通俗易懂]

    java400报错[通俗易懂]页面报400,控制台没输出也没报错,原来是数据库中的date类型,和实体的字段冲突。获取到页面的时间,转换成date类型,在给实体date类型属性赋值。报hasanunsupportedreturntype:classjava.lang.String===》在dao层写add方法时,疏忽了,写了String的返回类型400报错!

    2022年6月13日
    50
  • win7打印共享无访问权限_win7连不上共享打印机

    win7打印共享无访问权限_win7连不上共享打印机平时我们在设置网络共享打印机的时候,可能会遇到没有权限访问的情况,下面和大家分析一下如何解决该问题。一、系统环境WIN7二、没有权限访问的原因原因就是:安装打印机的那台WIN7电脑,设置了开机的帐户和密码,所以导致其它计算机没有权限访问。所以得使用下面的办法解决。三、解决办法在安装打印机的电脑上,进行如下的操作即可。首先,在运行那里输入gpedit.msc并回车。如下图。在打开的界面中,如下图一样…

    2025年6月26日
    2
  • 数据库去重_sql如何去重查询

    数据库去重_sql如何去重查询转载地址:https://blog.csdn.net/anya/article/details/6407280/用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpeopl…

    2022年10月1日
    2
  • ubuntu与centos的对比和选择「建议收藏」

    ubuntu与centos的对比和选择「建议收藏」一、分别介绍CentOS(CommunityENTerpriseOperatingSystem)是Linux发行版之一,它是来自于RedHatEnterpriseLinux依照开放源代码规定释出的源代码所编译而成。RedHatEnterpriseLinux(RHEL)是企业发行版。它每五年左右更新一次,在系统的稳定性,前瞻性和安全性上有着极大的优势。由于CentOS…

    2025年9月6日
    8
  • VCProtect虚拟机加壳工具

    VCProtect虚拟机加壳工具虚拟机加壳工具,可以给目标程序加上虚拟机,同时提供多态变形功能。下载http://www.vcprotect.com

    2022年6月27日
    51

发表回复

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

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