文章转载至全局变量、局部变量、静态全局变量、静态局部变量的区别

  C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。

从作用域看:

  全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

  静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新内阁结束都一直存在,他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

  局部变量也只有局部作用域,他是自动对象,他在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用结束后,变量就被撤销,其所占用的内存也被收回。

  静态全局变量也具有全局作用域,他与全局变量的区别在于如果程序包含多个文件的话,他作用于定义它的文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同的静态全局变量,他们也是不同的变量。

从分配内存空间看:

  全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间。

  全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上没有什么不同。区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。

  1、静态变量会被放在程序的静态数据存储区里,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是他与堆栈变量和堆变量的区别

  2、变量用static告知编译器,自己仅仅在变量的作用域范围内可见。这一点是他与全局变量的区别。

  从以上分析可以看出,把局部变量改变为静态变量后是改变了他的存储方式,即改变了他的生存期。把全局变量改变为静态变量后是改变了他的作用域,限制了他的使用范围,因此static这个说明符在不同的地方起的作用是不同的。

TIPS:

  1、若全局变量仅在单个文件中访问,则可以讲这个变量修改为静态全局变量。

  2、若全局变量仅在单个函数中使用,则可以将这个变量修改为该函数的静态局部变量。

  3、全局变量、静态局部变量、静态全局变量都存放在静态数据存储区。

  4、函数中必须要使用static变量的情况:当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

转载于:https://www.cnblogs.com/Taoer1996/p/6148350.html

全局变量、局部变量、静态全局变量、静态局部变量的区别相关推荐

  1. 静态局部变量和全局变量的区别!

    静态局部变量和全局变量的区别! C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域. 1.从作用域看: (1)全局变 ...

  2. 全局变量、静态全局变量、静态局部变量和局部变量的区别

    static和const都是C++中比较麻烦的东西,只要是太容易混淆他们的作用,之前对static做过点总结,但是不全面,还有很多小的错误,现在整理一下: 变量可以分为:全局变量.静态全局变量.静态局 ...

  3. 全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别(转)

    转:http://blog.163.com/zhangkai-@126/blog/static/312636552011101510416242/ 一.程序的内存分配 一个由C/C++编译的程序占用的 ...

  4. 局部变量,静态局部变量,全局变量,静态全局变量在内存中的存放区别(转)...

    我们先来看内存中的几大区:  内存到底分几个区? 下面有几种网上的理解,我整理一下: 一: 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构 ...

  5. C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别

    static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 面向过程设计中的static 全 ...

  6. C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)

    1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局 ...

  7. 四种变量的区别(局部变量,全局变量,静态局部变量,静态全局变量)

    区别: 1. 局部变量: (1)在函数体内部或者复合语句中定义的变量称为局部变量. (2)作用域为当前的函数体. (3)在栈区(动态存储区)分配. (4)函数调用时开始分配,调用结束时释放. 2. 全 ...

  8. php局部变量和全局变量的区别,PHP局部变量、静态变量、全局变量和超全局变量的使用和区别...

    首先,PHP 中从变量的范围上可以分为 4 类,分别是静态变量.局部变量.全局变量和超全局变量. PHP 局部变量与全局变量 在 PHP 中中全局变量和局部变量的定义是和 C 语言类似的.在函数外定义 ...

  9. 全局变量、局部变量、静态全局变量、静态局部变量的区别(与常见面试基础题)

    1.局部变量能否和全局变量重名?  答:能,局部会屏蔽全局.要用全局变量,需要使用 ":: "  局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用 ...

最新文章

  1. Python可视化(matplotlib)在图像中添加文本和标记(Text and Annotation)
  2. 《java多线程编程实战指南 核心篇》读书笔记三
  3. 近世代数--整环上的整除理论--主理想整环中最大公因子的存在表示定理
  4. postman怎么传session_Day 47: 不搞懂Cookie和session誓不罢休
  5. ReactiveSwift源码解析(三) Signal代码的基本实现
  6. 【李宏毅2020 ML/DL】P80 Generative Adversarial Network | Feature Extraction
  7. python学习手册-Python 重点知识整理(基于Python学习手册第四版)
  8. angular.js双向数据绑定实现动画特效
  9. 【图像修复】基于matlab GUI中值+均值+维纳+最小平方图像恢复【含Matlab源码 838期】
  10. Winlogon、LSASS、Userinit
  11. 360自动收录js代码如何添加
  12. OKR是上下同欲的载体
  13. 一铲子下去,服务器全瘫痪......
  14. html5手指滑动图片放大缩小,移动端如何实现图片通过捏合手势放大缩小呢?
  15. Elasticsearch集群原理、安装和基本使用
  16. python生成二维码,实现零件履历表(微信小程序+python后端+mysql)
  17. Oculus检测到你的NVIDIA驱动问题,解决办法
  18. 左耳听风——笔记三:面试技巧
  19. CINEMA 4D快捷键(C4D)
  20. 微信小程序js日期格式转化及加减

热门文章

  1. Ubuntu18.04 安装Nvidia驱动
  2. Virtual.Lab模拟钢板冲击声
  3. Matlab--三种归一化方法
  4. windows下搭建基于nginx的rtmp服务器
  5. linux命令sort的用法,linux之sort命令的用法
  6. NLP(新闻文本分类)——数据读取与数据分析
  7. 210 - Concurrency Simulator
  8. Namomo Spring Camp Div2 Week1 - 第二次打卡
  9. 激光器安规详细解读 - 一级 - 并以940波长为例
  10. 分析 linux /var/log/messages,2009-11-30 15:30 Linux系统日志/var/log/messages (转)