C语言 static静态变量的作用

static

c语言的变量种类

  1. 静态变量通过关键字 static 进行声明,该变量存储在数据段上,也就是内存上,可以改变变量的作用域和生命周期。
  2. 对于局部变量作用域依旧没有改变,只有定义该局部变量的函数和复合语句可以引用,但是其生命周期变成了直到整个源程序文件结束。
  3. 对于全局变量生命周期没有发生变化,但是其作用域反而有所减小,只有本文件的函数可以引用该全局变量。
  4. 针对static的特性,只有本文件内的函数可以引用该变量,在C语言中一个源程序文件就是一个模块,一个源程序文件(模块)声明了一个static全局变量之后其他模块只能通过该模块提供的接口函数来访问这个static变量,而不能直接实现对其进行操作,也就是说static可以实现一个模块的封装。

范例:
建立一个链表文件公司工资文件,tax.c:

  1. #include<stdio.h>



  2. static int base = 10000; //基本的工资基数 


  3. int chicken_legs(float i){ 

  4. return (1 + i)*base; 



建立一个向外界提供一个接口函数声明,tax.h:

  1. extern int chicken_legs(float i);


如其他源文件user.c需要引用该文件,使用接口文件:

  1. #include<stdio.h>


  2. #include"tax.h" 


  3. int main(void){ 

  4. int wage; 

  5. float increase; 

  6. wage = chicken_legs(increase); 

  7. return 0; 



user.c这个文件就不能修改tax.c中的用static声明的 base,而只能引用接口函数,static 关键字使文件中的全局变量的范围局限于该文件中,从而起到一个封装文件的作用

C语言 static静态变量的作用相关推荐

  1. C语言 static静态变量

    静态变量类型说明符是static.静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都 ...

  2. C语言static静态变量详解

    有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为静态局部变量,用关键字static进行声明. 通过用static类型声明后的变量,其变量的内存空间位于内存的全局静 ...

  3. c语言static静态变量

    1. static的全局变量 在函数定义外,作用范围被限制在所定义的文件中 不同文件静态全局变量可以重名,但作用域不重名(意思就是同名的static全局变量可以在同一个项目的不同文件出现) stati ...

  4. php之static静态变量详解

    php之static静态变量详解 一.总结 把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期. 把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围. 二.php之sta ...

  5. C#中static静态变量的用法

    原文:C#中static静态变量的用法 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析 ...

  6. php的 静态变量,PHP之static静态变量详解

    在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料. static用法如下: 1.static 放在函数内部修饰变量 2.s ...

  7. C语言中static静态变量

    静态变量的说明符是static static静态变量属于静态存储方式,其存储空间是 静态数据区(也就是存入全局存储区),静态数据区的数据在整个程序运行期间一直占用这些内存.也可以认为他的内存地址一直不 ...

  8. static静态变量的理解

    静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期 ...

  9. 3、如何证明static静态变量和类无关?

    如何证明static静态变量和类无关? 可以从以下三个方面证明static静态变量和类无关: 1.不需要初始化类就可以直接使用静态变量: 2.在类中写个main方法运行,即便不写初始化类的代码,静态变 ...

最新文章

  1. ASP.NET Web API Selfhost宿主环境中管道、路由
  2. conda (picard)
  3. 【转载】用廉价的315M遥控模块实现数据传输
  4. Spring Boot 发布 jar 包转为 war 包秘籍。
  5. 01.神经网络和深度学习 W3.浅层神经网络
  6. oracle gets/exec 单位,ORACLE AWR使用基础
  7. 华为P50外观定了:居中挖孔
  8. 报错:error LNK2001:unresolved external symbol _WinMain@16
  9. 第十一章 策略梯度(Policy Gradient)-强化学习理论学习与代码实现(强化学习导论第二版)
  10. idea 自动生成mybaits_Intellij idea中使用Mybatis插件Mybatis Generator
  11. 使用MyBatis后,DAO层的方法还能重载吗?
  12. css中引入自定义字体PingFang-SC-Regular
  13. 计算机科学中的张量,杨晓伟教授到我院做“张量学习的几个关键问题”学术报告...
  14. win7使用命令行改计算机名,Win7巧用注册表更改计算机名的实用方法
  15. 大学生旅游风景主题dreamweaver网页设计大作业-陕西渭南HTML+CSS制作网页
  16. java maven是做什么的_maven是干什么用的
  17. win10系统电脑分辨率异常解决办法
  18. 程序员朋友们,请答应我?别再去东南亚写代码了好么?
  19. 转:经典SQL语句大全(绝对的经典)
  20. JavaMail 邮件附件名乱码问题

热门文章

  1. 解决小程序text换行的问题
  2. Activiti7审批流
  3. 最全面的python编辑器/IDE介绍
  4. 如何给 ESP32 选择外接 Flash 以及如何使能 QIO 模式
  5. 五步实现VOS3000客户端拨打被叫号码前面自动加0
  6. Spring Cloud Gateway 整合Spring Security
  7. Fastjson内幕
  8. 【git教程】git安装、本地仓库与远程仓库使用详细指南
  9. shell programming tutorial
  10. STM32通信接口RS485