1)全局变量是不显式用static修饰的全局变量,但全局变量默认是动态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
2)全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域 这两者在存储方式上并无不同。
这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

静态局部变量
在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量。
通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。
静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
静态局部变量有以下特点:
该变量在全局数据区分配内存;
静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
例子程序:
#include<iostream>
using namespace std;
size_t count_calls()
{
static size_t ctr=0;
return ++ctr;
}
int main()
{
for(size_t i=0;i!=10;++i)
cout<<count_calls()<<endl;
return 0;
}
程序的输出结果是输出1到10的数。因此可以看出每次调用函数,ctr都是在上一次调用后ctr的值得基础上再加1的。所以静态局部变量在程序函数借宿的时候不会被撤销,静态局部变量会持续存在并且保持它的值。只有当程序结束的时候,静态局部变量才会被撤销

全局变量与静态全局变量相关推荐

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

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

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

    按存储区域分:全局变量.静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分: 1.全局变量在整个工程文件内都有效: 2.静态全局变量只在定义它的文件内有效: 3. ...

  3. C++全局变量,静态全局变量,不加修饰符的全局变量

    1.C++全局变量一般指extern全局变量,作用域:多个文件 使用方式:.h声明全局变量 extern int a; 对应.cpp文件定义全局变量 int a=1; 其他cpp文件使用全局变量 if ...

  4. c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

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

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

  6. 【C语言局部变量/静态局部变量/全局变量与静态全局变量

    1基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  7. c语言静态变量与局部变量,C语言 全局变量、静态全局变量、局部变量、静态局部变量...

    //test.c #include extern int global_var; void test_global_var() { global_var++; printf("global_ ...

  8. C语言全局变量(c文件和h文件中的全局变量、静态全局变量)使用注意事项

    C语言在头文件中包含全局变量有三种形式: 1 在头文件中声明一个全局变量,在一个C文件中定义全局变量,然后在所有的引用了这个头文件的C文件里都可以使用该全局变量值. 如在main.c定义 int a ...

  9. c语言局部变量 静态局部变量 全局变量与静态全局变量

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

最新文章

  1. 速看!上班后如何做好防护?这9点一定要知道
  2. Centos6.8下SVN安装
  3. [Algorithm]一切始于ADT-表达式计算
  4. 2013年阿里巴巴实习生笔试题
  5. shell awk学习3
  6. unity游戏框架学习-场景管理
  7. Angular 字符串替换
  8. 百度贴吧个人主页_回望人人网/新浪博客/百度贴吧时
  9. 3.2JavaScript网页编程——JavaScript网页编程基础
  10. 计算机相关经典书籍推荐
  11. 从kernel源码进阶C语言
  12. 2566420-12-8,TCO-PEG3-alcohol羟基允许发生额外反应以进一步衍生化合物
  13. VBA综合应用——解压并剔除Excel敏感数据
  14. AppOps 命令大全
  15. linux重启domino服务,在Unix平台中通过脚本来启动和停止Domino
  16. win10 计算机管理器没有ime,win10电脑任务栏输入法初选ime禁用的解决方法
  17. const*与*const的区别
  18. 生成HTTPS协议需要的SSL证书
  19. Vue3项目基本知识点
  20. 四旋翼无人机从0到1的实现(十八)无人机外设驱动→MPU6500

热门文章

  1. 2020人工神经网络第一次作业-参考答案第三部分
  2. 妹子调车为哪般?室外赛道来闯关。
  3. 360浏览器卸载_如何卸载360浏览器,如何卸载360安全浏览器
  4. asp创建mysql表_创建一个数据库,用ASP怎么写?
  5. php 计算两点时间距离,PHP计算地球上两点之间的距离(示例详解)
  6. django安装mysql_django+mysql安装和设置
  7. RAW 原始套接字 TCP UDP协议解析
  8. 如何查看 el-form-item 的prop属性_PHP 7.4中的类型属性(Typed Properties)
  9. 【 Vivado 】XDC文件的约束顺序
  10. 【 MATLAB 】Filter Data