1. static 变量
  静态变量的类型 说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。
 2. 静态局部变量
  静态局部变量属于静态存储方式,它具有以下特点:
  (1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
  (2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。
  (3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以 看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的 值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成 意外的副作用,因此仍以采用局部静态变量为宜。
 3.静态全局变量
  全局变量(外部变量)的说明之前再冠以static 就构 成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局 变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在 定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此 可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量 后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。

提示:

  A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;

  B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;

  C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;

D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)

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

变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量

按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。

按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。

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

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

linux 系统下的static变量相关推荐

  1. Linux下添加计划任务,Linux系统下使用crontab添加计划任务的方法

     在服务器中添加定期执行的任务,在很多情况下是非常必要的.比如,每天清理一次/tmp目录下的文件;没几分钟检查某一守护进程是否正常等等.这样计划任务就显得尤为方便.下面将介绍如何在Linux系统中 ...

  2. Linux系统下配置JDK环境变量

    刚申请了阿里云,平时很少接触Linux,特此记录一下Linux系统下安装JDK的步骤. 1.进入usr:cd /usr: 2.创建java文件夹:mkdir java: 3.将下载好的文件拷贝至jav ...

  3. 苹果电脑上使用linux环境变量,mac系统下修改环境变量

    苹果电脑使用率越来越高,在mac系统下研发,性能要比在windows下快不少,既然要开发,免不了要配置环境变量.下面是学习啦小编收集整理的mac系统下修改环境变量,希望对大家有帮助~~ mac系统下修 ...

  4. Linux系统下I/O操作讲解,深入了解实战高级I/O编程

    Linux系统下I/O 一.I/O简介 I/O(输入/输出)是在主存和外部设备(磁盘驱动器.网络.终端)之间复制数据的过程.输入是从外部设备复制到主存,输出是从主存复制到外部设备. 在Linux系统中 ...

  5. Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验三 文件操作算法: 实现在/proc目录下添加文件 Unix/Linux操作系统分析实验四 设备驱动: ...

  6. Unix/Linux操作系统分析实验四 设备驱动: Linux系统下的字符设备驱动程序编程

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配 Unix/Linux操作系统分析实验三 文 ...

  7. Linux系统下进程的概念《一》

     个人主页:欢迎大家光临-->沙漠下的胡杨   各位大帅哥,大漂亮  如果觉得文章对自己有帮助  可以一键三连支持博主  你的每一分关心都是我坚持的动力   ☄: 本期重点:Linux下的进程的 ...

  8. Linux系统下使用java语言调用海康威视SDK连接摄像头过程记录

    1.准备工作 1.1. 设备型号 萤石多功能互联网摄像头 CS-C2C-3B2WFR 1.2. SDK下载 通过海康威视官网可以下载到最新的Linux下的SDK开发包,分为32位和64位,根据电脑情况 ...

  9. Linux系统下活用History命令

    Linux系统下可通过history命令查看用户所有的历史操作记录,在安全应急响应中起着非常重要的作用,但在未进行附加配置情况下,history命令只能查看用户历史操作记录,并不能区分用户以及操作时间 ...

最新文章

  1. 给正在为就业苦恼的应届生
  2. HTTP VS RPC
  3. 牛逼!Python错误、异常和模块(长文系列第4篇)
  4. C#设置系统日期时间格式
  5. chrome下老是弹出网页显示 true
  6. 国内外物联网平台初探(篇五:机智云平台)
  7. ThinkPHP框架 _ 学习5
  8. goldendict设置使用vlc或mplayer发音
  9. activex java 控件_swt java 内嵌ActiveX控件
  10. 【Linux/CentOS】上手常见问题笔记
  11. XP_cmdshell
  12. 网页可以播放RTMP视频流?支持RTMP的网页播放器
  13. 高仿QQ举报网页和举报成功网站页源码
  14. 在Ubuntu18.04.3系统中安装谷歌拼音输入法(Google Pinyin)
  15. Oracle DB audit
  16. 华为RH2288 V3服务器新加硬盘不识别
  17. 建筑施工员日常工作内容,施工员证全国通用吗?
  18. 左耳朵耗子:我看ChatGPT,为啥谷歌掉了千亿美金
  19. 第二章 ObjectARX类库简介
  20. 基于maven自动发布-Maven Wagon

热门文章

  1. 检测您的CPU是否支持RemoteFX(SLAT二级地址转换)
  2. 假设某系统的登录账号是“Admin“,密码是“p888888“;编程实现要求用户输入账号和密码,当验证通过时显示“登录成功”,当验证失败时显示“账号或密码错误”
  3. html骰子图片点数,html骰子
  4. 乐视max2如何打开heic文件,heic是什么文件
  5. 2022-2028年中国玉米收获机行业发展模式分析及未来前景规划报告
  6. Google Earth Engine(GEE)——2019年数字地球非洲的耕地范围地图
  7. 559. Maximum Depth of N-ary Tree*
  8. ubuntu中微信突然打不开了
  9. 一双火眼金睛教你企业ERP选型
  10. VSS、RSS、PSS、USS 内存使用分析(超详细)