在C语言中static是非常重要的一个关键字

static意为静态的,它的用法基本分为三种

1. 修饰局部变量(改变局部变量的生命周期)

2. 修饰全局变量(使全局变量仅作用于当前源文件)

3. 修饰函数(使函数仅作用与当前源文件)

怎么修饰的?而生命周期又是怎么被改变的?

我举个例子,让我们一起来看一下

先写一串取a的地址的代码

现在我们运行这段代码,取a的地址来看一下

a的地址为00eff748

好,我们接着再运行一次

会发现,a的地址变成了012ff8b4

a的地址变了,a生命周期就只有一个循环

是因为a的前面其实还隐藏了一个关键字auto

auto意为自动的,它是个自动变量,自动创建,自动销毁

如果不加隐藏我们的代码其实是这样的

auto是自动生成的,即使你把它删掉,它其实还在那

那我们怎么改变a的生命周期呢,这时候static就派上用场了

只要我们在int a = 0;前面加上static就可以了,用static把auto顶替掉

这时候我们再来测会发现,不管运行多少次,a的地址都变为了一个定值

我们就能总结出一点,static把a的生命周期改变了

当然,static不止用于地址,它在循环中的表现同样出色

可以看到,上面两组代码,一个加了static修饰,一个没加

左边代码没有static修饰a,所以a生命周期就只有一个循环,一个循环结束就会被重置为1

所以printf打印出来的结果为2 2 2 2 2 2 2 2 2 2

而右边代码有个static修饰,a生命周期被延长,取消了自动销毁的特性,所以每次循环中a的值都+1

所以printf打印出来的结果为2 3 4 5 6 7 8  9 10 11 

对,还要补充一点 

static修饰局部变量,表面上是改变局部变量的生命周期

本质上是改变了变量的存储类型,由栈区变为静态区

(内存基本划分为几个区域,栈区,堆区,静态区)

这里就不细说了

stiatic修饰全局变量,使全局变量由作用整个工程变为仅作用于当前源文件

本质上是将全局变量的外部链接属性变为内部链接属性

static修饰函数跟static修饰全局变量的本质基本一致

第一次写博客,本人也才刚学编程4天,有什么错误的地方还请大佬们指出来

先生们有何教我?

c语言 static运用,灵活改变生命周期,让你写代码如鱼得水相关推荐

  1. asp.net application,session,static 几种变量生命周期及用法 收藏

    asp.net application,session,static 几种变量生命周期及用法 收藏 Application 是应用程序级变量,如果用到多个用户之间的通信的时候用,多用在网站计算器等,存 ...

  2. 指针,c语言关键字,作用域,生命周期,内存数据存储

     作用域:变量可被访问的有效范围. 生命周期:变量存储空间的有效生存时间. extern int c;   通过关键字extern来告诉程序int c:是别的程序中定义的. extern int ...

  3. c语言中的钩子函数,生命周期(vue的钩子函数)

    生命周期图示 创建前,创建后,挂载前,挂载后,更新前,更新后,销毁前,销毁后 beforeCreate:function(){ console.log('1-beforeCreate 组件还未被创建' ...

  4. android自定义的生命周期,android 自定义控件之ViewGroup生命周期执行步骤(示例代码)...

    前言 了解ViewGroup的生命周期的执行步骤对于自己自定义ViewGroup的时候十分重要,清楚了整个流程才能对ViewGroup有更深的理解.本文从个人的总结,来阐述一下执行的顺序. 执行说明 ...

  5. spring bean的生命周期面试回答及代码演示

    前言: 在面试中经常会被问到谈谈你对spring bean生命周期的理解,如果单方面的在网站看写的博客很难理解的,最好自己写代码体会他的实现流程. 1.先了解这几个类的意思 BeanNameAware ...

  6. 【Qt】通过QtCreator源码学习Qt(八):插件生命周期及对应状态(代码走读)

    1.简介 PluginManager管理插件IPlugin的生命周期,从初始化插件到删除插件共八个状态.插件状态表--PluginSpec::enum State { Invalid, Read, R ...

  7. Vue生命周期详解 对应代码解析

    -使用GitHub阅览 对于Vue的实例,比如 const app = new Vue({...}) 浏览器解析到这段代码的时候,自动执行beforeCreate => created => ...

  8. 这么说线程生命周期是不是简单了点?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「日拱一兵」 为什么要了解线程的生命周期 ...

  9. 【JAVA多线程学习笔记】(1)实现线程的方式 线程生命周期 操作线程的方法

    文章目录 两种方式实现线程 继承Thread类 模拟银行叫号的程序 Runnable接口 代码1:(与swing相结合创建gui程序) Thread类的⼏个常⽤⽅法 线程生命周期 操作线程的方法 代码 ...

最新文章

  1. Exchange服务器系列课程之四--管理Exchange收件人
  2. Dart中的catchError捕获顺序
  3. Idea自带工具解决冲突
  4. 点一万个赞:商汤SiamRPN目标跟踪最强算法开源
  5. java程序设置jvm_Java程序员应在2018年学习的3种JVM语言
  6. [POJ2151]Check the difficulty of problems(概率DP)
  7. c语言中把一个数缩小十倍_C语言实例第04期,在控制台打印出著名的杨辉三角...
  8. html复选框不可修改,如何用【伪类】成功修改HTML checkbox默认样式?(新checkbox覆盖老checkbox无法点击的问题)...
  9. Qt:QListWidget的item上实现右键菜单
  10. 开机未发现nvidia控制面板_nvidia控制面板打不开如何解决_nvidia控制面板点了没反应...
  11. 实战:tomcat版本升级
  12. 【报告分享】2021年中国网络文学出海报告-艾瑞咨询(附下载)
  13. 删除后别人的微信号变成wxid_重磅!只需三步修改微信号,不用设置出生日期...
  14. uni-app老年模式字体设置思路
  15. winform做的单机登录界面和账号注册界面
  16. Java项目:SSH公交路线查询网站系统
  17. 第12集 关于库卡机器人对需要减速和插值方式说明
  18. Java 实现QQ聊天室
  19. linux和华为云计算区别,华为云计算HCIE-Cloud面试宝典(九)
  20. 七大管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则!

热门文章

  1. html5中audio标签
  2. python 学习汇总1:文件读写 tcy
  3. 【Java 基础】Buffer 处理中文乱码问题
  4. php socket连接
  5. 作为程序员,你是填坑的还是挖坑的?
  6. com.alibaba.fastjson 初介绍
  7. 执行svn sync命令做svn同步时遇到Failed to get lock on destination repos, currently held by ...错误
  8. 安全架构-加密算法-3DES加密算法.NET C#实现
  9. 元宵节又看到不好的东西了
  10. 支付宝启动新域名zhifubao.com 已通过备案