c语言 static运用,灵活改变生命周期,让你写代码如鱼得水
在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运用,灵活改变生命周期,让你写代码如鱼得水相关推荐
- asp.net application,session,static 几种变量生命周期及用法 收藏
asp.net application,session,static 几种变量生命周期及用法 收藏 Application 是应用程序级变量,如果用到多个用户之间的通信的时候用,多用在网站计算器等,存 ...
- 指针,c语言关键字,作用域,生命周期,内存数据存储
作用域:变量可被访问的有效范围. 生命周期:变量存储空间的有效生存时间. extern int c; 通过关键字extern来告诉程序int c:是别的程序中定义的. extern int ...
- c语言中的钩子函数,生命周期(vue的钩子函数)
生命周期图示 创建前,创建后,挂载前,挂载后,更新前,更新后,销毁前,销毁后 beforeCreate:function(){ console.log('1-beforeCreate 组件还未被创建' ...
- android自定义的生命周期,android 自定义控件之ViewGroup生命周期执行步骤(示例代码)...
前言 了解ViewGroup的生命周期的执行步骤对于自己自定义ViewGroup的时候十分重要,清楚了整个流程才能对ViewGroup有更深的理解.本文从个人的总结,来阐述一下执行的顺序. 执行说明 ...
- spring bean的生命周期面试回答及代码演示
前言: 在面试中经常会被问到谈谈你对spring bean生命周期的理解,如果单方面的在网站看写的博客很难理解的,最好自己写代码体会他的实现流程. 1.先了解这几个类的意思 BeanNameAware ...
- 【Qt】通过QtCreator源码学习Qt(八):插件生命周期及对应状态(代码走读)
1.简介 PluginManager管理插件IPlugin的生命周期,从初始化插件到删除插件共八个状态.插件状态表--PluginSpec::enum State { Invalid, Read, R ...
- Vue生命周期详解 对应代码解析
-使用GitHub阅览 对于Vue的实例,比如 const app = new Vue({...}) 浏览器解析到这段代码的时候,自动执行beforeCreate => created => ...
- 这么说线程生命周期是不是简单了点?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「日拱一兵」 为什么要了解线程的生命周期 ...
- 【JAVA多线程学习笔记】(1)实现线程的方式 线程生命周期 操作线程的方法
文章目录 两种方式实现线程 继承Thread类 模拟银行叫号的程序 Runnable接口 代码1:(与swing相结合创建gui程序) Thread类的⼏个常⽤⽅法 线程生命周期 操作线程的方法 代码 ...
最新文章
- Exchange服务器系列课程之四--管理Exchange收件人
- Dart中的catchError捕获顺序
- Idea自带工具解决冲突
- 点一万个赞:商汤SiamRPN目标跟踪最强算法开源
- java程序设置jvm_Java程序员应在2018年学习的3种JVM语言
- [POJ2151]Check the difficulty of problems(概率DP)
- c语言中把一个数缩小十倍_C语言实例第04期,在控制台打印出著名的杨辉三角...
- html复选框不可修改,如何用【伪类】成功修改HTML checkbox默认样式?(新checkbox覆盖老checkbox无法点击的问题)...
- Qt:QListWidget的item上实现右键菜单
- 开机未发现nvidia控制面板_nvidia控制面板打不开如何解决_nvidia控制面板点了没反应...
- 实战:tomcat版本升级
- 【报告分享】2021年中国网络文学出海报告-艾瑞咨询(附下载)
- 删除后别人的微信号变成wxid_重磅!只需三步修改微信号,不用设置出生日期...
- uni-app老年模式字体设置思路
- winform做的单机登录界面和账号注册界面
- Java项目:SSH公交路线查询网站系统
- 第12集 关于库卡机器人对需要减速和插值方式说明
- Java 实现QQ聊天室
- linux和华为云计算区别,华为云计算HCIE-Cloud面试宝典(九)
- 七大管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则!
热门文章
- html5中audio标签
- python 学习汇总1:文件读写 tcy
- 【Java 基础】Buffer 处理中文乱码问题
- php socket连接
- 作为程序员,你是填坑的还是挖坑的?
- com.alibaba.fastjson 初介绍
- 执行svn sync命令做svn同步时遇到Failed to get lock on destination repos, currently held by ...错误
- 安全架构-加密算法-3DES加密算法.NET C#实现
- 元宵节又看到不好的东西了
- 支付宝启动新域名zhifubao.com 已通过备案