c语言入门到精通--C语言 static的使用
小职 2021-12-28 来源 : 阅读 688 评论 0

摘要:本篇主要介绍了c语言入门到精通--C语言 static的使用,通过具体的内容展现,希望对C语言开发的学习有一定的帮助。

本篇主要介绍了c语言入门到精通--C语言 static的使用,通过具体的内容展现,希望对C语言开发的学习有一定的帮助。

c语言入门到精通--C语言 static的使用

你知道C语言中  static 有几种用法?


1.static 可以修饰局部变量

首先让我看看这段代码


#include<stdio.h>

void test()

{

int a = 1;

a = a + 1;

printf("%d", a);

}

int main()

{

int i = 0;

while (i < 10)

{

test();

i++;

}

return 0;

}

你认为输出的结果是什么呢?

c语言入门到精通--C语言 static的使用



那为什么结果是2222222222呢

c语言入门到精通--C语言 static的使用



因为局部变量 a 进入这个范围创建  出了这个范围销毁   所以结果都是2


当我们加上static 的结果又会是什么

c语言入门到精通--C语言 static的使用



那为什么加上 static 结果就不一样了


我们研究一下static的使用原理


我们的内存分为三大类

c语言入门到精通--C语言 static的使用



我们的局部变量放在栈区  


而static把a放在了静态区   而在静态区的变量 出了他的范围是不销毁的


我们对比一下 可能更加直观

c语言入门到精通--C语言 static的使用



 所以 static 修饰局部变量的时候,其实改变的是局部变量得存储位置


静态得局部变量是放在静态区,放在静态区的变量出了作用域是不会销毁的,相当于生命周期延长了。


 补充   变量的作用域是不变的,只是生命周期延长了


2. static 可以修饰全局变量

我们再创建一个源文件 

c语言入门到精通--C语言 static的使用



   全局变量的作用域是整个工程


如果我们想引用另一个源文件的函数     这里我们不得不说 extern 这个关键字


如图

c语言入门到精通--C语言 static的使用



  static 可以修饰全局变量  如果我们再全局变量前 加上static会是什么结果呢

c语言入门到精通--C语言 static的使用



此时就会报错  


一个全局变量具有外部链接属性的 (就是可以被其他源文件引用)但是被static 修饰后外部链接属性就变成了内部链接属性 只能在自己所在的源文件内部使用不能在其他文件内部使用


所以再次调试的时候就会报错


那 static 修饰的全局变量的本质是  外部链接属性发生改变   而不是他的作用域变小


static 修饰全局变量的意义是  如果你定义了一个全局变量  别人用 extern 就可以随便使用  


如果你不想让别人看  就可以用static . 


3.static 可以修饰函数

我们用另一个源文件创建一个函数  如图


用 关键字extern 声明后  调试结果

c语言入门到精通--C语言 static的使用



这里我们在函数前加上static 又会是什么结果呢 

c语言入门到精通--C语言 static的使用

c语言入门到精通--C语言 static的使用




  其实一个函数本身具有外部链接属性  被static修饰后 外部链接属性变成了内部链接属性  只能在源2.c 内部使用 其他源文件无法使用    使用上感觉作用域变小


我们可以发现 static 修饰全局变量和修饰函数用法一样   



总结一下

当我们使用一个局部变量  出了他的范围 不希望他被销毁下次进来之后还在 那我们就可以拿static 修饰 


当我们希望一个全部变量 在他自己源文件使用 任意其他地方不想让别人看到 也可以用static修饰


当我们写的函数只是自己用一下 不希望别人引用 则也可以用static修饰


✅  扫码免费获取IT基础课程 · IT技术干货 · 答疑解惑 · 职业测评

c语言入门到精通--C语言 static的使用


本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程