c++全局变量与静态变量
概述:
全局变量和和由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
c++全局变量与静态变量相关推荐
- 深入理解C语言系列之内存和地址的故事(虚拟内存分区、全局变量与静态变量、外部函数内部函数、选择性编译)
文章目录 一.内存的分区 二.虚拟内存分区 三.变量作用域与静态变量 四.外部函数与内部函数 五.include与define选择性编译 一.内存的分区 1.内存分为:物理内存和虚拟内存. 物理内存︰ ...
- 全局变量和静态变量以及内存堆栈的关系
在编写程序时,内存的控制是很重要的一部分.关于全局变量和局部变量,静态变量的关系如何?以及他们在内存在是存储于哪部分的?做个记录,以便往后查看. 1. 全局变量和静态变量 全局变量:又称外部变量,与之 ...
- python中静态变量的作用_小白必读文章之全局变量与静态变量
全局变量与静态变量 static 声明的变量在C语言中有两方面的特征: 1.变量被放在程序的全局存储区中,这样在下一次调用的时候还可以保持原来的赋值.这一点是它与堆栈变量和堆变量的区别. 2.变量用s ...
- java 静态全局变量_静态变量static和全局变量global
静态变量static , 全局变量global 静态变量 在java也叫类变量从名字可以看出它是属于某个类的而不是类的实例.它的关键字是static存储在静态存储区,当程序执行,类的代码被加载到内存, ...
- 【C++】局部变量、全局变量、静态变量与动态对象的性质
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 概述 局部变量 在一个函数内部定义的变量(包括函数形参)是局部变量. 全局变量 在函数外定义 ...
- react-native全局变量和静态变量使用
react-native 多个类引入变量,可以使用下面三个方式 静态变量 全局变量的使用: 1 导入文件方式 2 全局变量方式 实现类 Test.js import {Button, Text, Vi ...
- C语言学习(7)——全局变量和静态变量
数据传递:(3种方式) ①:参数传递 ②:返回值 ③:全局变量 extern:可以在另一个文件引入全局变量,不需要做初始化的操作. >>>>>>>>&g ...
- 详解全局变量,全局变量与静态变量的区别
特点: ① 作用域:全局可见. 全局变量(外部变量)是在函数外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾. 注:通常把超出一个函数的作用域称为全局作用域, ...
- 局部变量、全局变量、静态变量
局部变量 定义:局部变量指在程序中只在特定过程或函数中可以访问的变量.换言之,在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外时不能使用这些 ...
最新文章
- 寒冰linux视频教程笔记8 系统监控
- 基于 MVP 的 Android 组件化开发框架实践
- pycharm 更改创建文件默认路径
- 【数据库】Windows安装redis全流程
- Unity3d远程连接Hololens提示Cannot connect without a remote machine address specified
- windows加域后的问题
- 最少点字典序最短路径_LeetCode 89,因为题目晦涩而被点了1500+反对的搜索问题...
- 海康摄像头如何查看IP,重置密码
- 中国30家值得信赖的大数据采集公司汇总!
- 基于聚类分析和因子分析的空气质量研究
- oracle11g broker,张欣橙Oracle11g配置DGbroker
- html文件做屏保win10,win10系统把屏保设置为桌面壁纸的处理方法
- Element-UI checkbox 如何改造成只可单项选择
- 第十次 Java作业
- 瓦力发布系统安装部署
- 0 Day:操作系统的一些问题
- 【电力系统】——交流潮流、直流潮流
- UG10.0汽车冲压连续模具设计视频教程 AutoForm分析
- 【云原生生态圈】:Docker核心技术全面总结
- python两个同切圆_【Python】学习之同切圆与五角星绘图