特点:

  • ① 作用域:全局可见。
           全局变量(外部变量)是在函数外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。
           注:通常把超出一个函数的作用域称为全局作用域,其他几种(如块作用域)不超出一个函数的作用域称为局部作用域。
  • ② 存储空间:静态存储区
           系统会在编译时将全局变量分配在静态存储区,在程序执行期间,对应的存储空间不会释放,一直到程序结束才会释放。
           注:一个程序在内存中占用的存储空间可以分为3个部分:程序区(存放可执行程序的代码)、静态存储区(存放静态变量)、动态存储区(存放动态变量)。
  • ③ 优先度:全局变量优先度低于局部变量
    当全局变量和局部变量重名时,会屏蔽全局变量,局部优先。

优点 :使用全局变量程序运行时速度会快一点,因为内存不需要再分配。
缺点 :使用全局变量会占用更多的内存,因为其生命期长。

全局变量作用域的扩展和限制:

  • ① 扩展:使用extern关键字可以对全局变量的作用域进行扩展。
            前面提到,全局变量的作用域为从变量的定义处开始,到本程序文件的末尾。若想在本文件全局变量定义之前引用该全局变量,可以在引用之前用extern关键字对该变量进行说明,有了此说明,就可以从说明之处起,合法地引用该变量。
            若想在一个文件(设为a.cpp)中引用另一个文件(设为b.cpp)中已定义的全局变量,可以在a.cpp中extern关键字对该全局变量进行说明,在编译和连接时,系统就会知道该全局变量已经在其他文件(b.cpp)中定义过了。
           注:在编译时遇到extern,系统会现在本文件中查找全局变量的定义,如果找到,就在本文件中扩展作用域;如果找不到,就在连接时在其他文件中查找全局变量的定义,如果找到,就将作用域扩展到本文件;如果还找不到,按出错处理。

  • ② 限制:使用static关键字可以限制全局变量的作用域。(又称之为隐藏)
           全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern对全局变量进行声明,就可以使用全局变量。
           如果希望全局变量仅限本文件引用,而不能被其他文件引用,可以在定义全局变量时在前面加一个static关键字。

全局变量和全局静态变量的区别:

首先,并不是说全局变量在定义时加了static关键字才是静态存储,不加static就是动态存储,不是的。不管加不加static,全局变量都是存储在静态存储区的,都是在编译时分配存储空间的,两者只是作用域不同,全局变量默认具有外部链接性,作用域是整个工程,全局静态变量的作用域仅限本文件,不能在其他文件中引用。

详解全局变量,全局变量与静态变量的区别相关推荐

  1. 2020-11-28(全局变量和局部静态变量)

    常量和全局变量有着相似的特征,都是在程序执行前就存在了.在大多数情况下,在PE文件中的只读数据节中常量的节属性被修饰为不可写:而全局变量和静态变量则在属性为可读写的数据节中. 具有初始值的全局变量,其 ...

  2. 静态变量与非静态变量的区别

    静态变量的类型说明符是static,非静态变量反而类型说明符就不是static了.本文主要介绍静态和非静态变量的区别,希望对你有帮助,一起来看. AD: 静态变量:静态变量使用 static 修饰符进 ...

  3. java中implement_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实 ...

  4. 动态变量和静态变量的区别,堆和栈的区别

    动态变量和静态变量的区别: 1.存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区) 2.生命期动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变 ...

  5. Java implement意思_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 发布于 2020-4-14| 复制链接 摘记: 详解JAVA中implement和extends的区别extends是继承父类,只要那个类不是声 ...

  6. Java 成员变量和静态变量的区别

    文章目录 Java 成员变量和静态变量的区别 变量声明默认值 与 Python 的联系 实例变量的声明 类变量的声明 static 方法 Java 成员变量和静态变量的区别 1)成员变量所属于对象.所 ...

  7. vlan标签详解 access、trunk和hybrid的区别

    vlan标签详解 access.trunk和hybrid的区别 我们知道,不同网段间需要通过路由转发才能通信: 那在同一网段不同vlan之间的PC,是不能互相通信的.其实这并不是绝对的.了解vlan的 ...

  8. c语言中的fscanf是啥意思,详解C语言中fgets和fscanf区别

    fscanf函数是C语言的文件格式读取函数的方法之一,它使用空格.制表符和回车来分割不同的单词,这样可以让我们使用起来更方便,下面就让爱站技术频道小编带你来学习详解C语言中fgets和fscanf区别 ...

  9. python静态变量和动态变量_动态变量和静态变量的区别,堆和栈的区别

    动态变量和静态变量的区别: 1.存储位置 动态变量:存储在内存出栈数据区 静态变量:存储在全局数据区(静态数据区) 2.生命期 动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数 ...

最新文章

  1. Steve J. Luck推出最新ERPs独家视频课程
  2. 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
  3. C# 构造函数中调用虚函数
  4. silverlight中常用公共函数分享
  5. 9.整型安全操作.rs
  6. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理
  7. 【服务器】一次对Close_Wait 状态故障的排查经历
  8. AttributeError : module ‘enum‘ has no attribute ‘IntFlag‘
  9. LG电子成功进行太赫兹频段6G无线信号传输,距离超过100米
  10. python简介pdf_Python以及QuTip包简介.PDF
  11. DZ插件-免费DZ插件大全汇集所有插件功能
  12. 【C语言】案例四十八 综合案例——天生棋局(围棋棋盘)
  13. LaTeX调整页眉宽度适应文本
  14. 项目管理软件怎么选?看看中国电信天翼云的选择
  15. 移动端应该如何动态设置字体大小?
  16. 牛客小白月赛17 F小黄鸭(计算几何+积分+二分)
  17. Python列表、元组、字典相关练习题记录——第三天
  18. 排名趋于稳定后,最新的博主排名(TOP10)
  19. 两个有序表的合并(三种方法)
  20. PS抠图(菜鸟、快捷键)

热门文章

  1. 以太坊Solidity语言的Receive函数和Fallback回退函数详解
  2. Java实现 “账本“ 小项目(一) 之数据库设计(源码+注解)
  3. 福特在企业里推数据访问和分析功能
  4. Notification设置的小图标显示的是小方块
  5. python可以学会编程语言吗_为什么我建议你一定要学Python?
  6. 66.网页设计你缺少的是像艺术家一样“偷窃”
  7. 友情链接互换-乐晨博客官方网站诚邀
  8. 网页链接聊QQ,点击链接聊QQ
  9. 详细解答Java中抽象类和接口的区别问题!
  10. python基于django的个人电子相册系统