C语言里的作用域,生命周期和static与extern关键字

作用域:

用通俗易懂的语言来说就是:一个代码中的名字使用是有限定范围的,举个例子:

52fe8ddb5b6d4bf5a87817d5e1cc32fd.jpg

 

i是在循环里面定义的,所以他的作用域就是for循环里面,因此,printf作为循环外的操作,这个i是没办法识别的。

 

生命周期:

生命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段。

1.局部变量的生命周期是:从进入作用域开始,直到作用于生命周期结束。

2.全局变量的生命周期是整个程序的生命周期。

注意:在主函数里面定义的也算局部变量,只有在所有函数之外定义的变量才叫全局变量。

 

static修饰局部变量:

来比较两组代码的区别以及他的输出结果

0b3e26549b3041bea25f195637f88437.jpg

b8694b4b60e14107a572b4face058c60.jpg 

第一组很正常,所以输出结果就是五个1

第二组s变量被static修饰,输出结果就变成了12345

 

所以可以猜测到,static没有销毁这个局部变量s,使得s再下一次循环中直接使用,而不是重新创建。

结论:static修饰的变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是储存在内存的栈区的,但是被static修饰后储存到了静态区,存储在静态区的变量与全局变量是一样的,所以其生命周期就和程序的生命周期一样了。但是这个变量的作用域不变。

除此之外要注意:

static修饰全局变量:

1.首先要知道全局变量是具有外部链接属性的

2.全局变量或者函数被static修饰后,外部链接属性就变成了内部链接属性,不能再跨文件使用了,相当于作用域变小了。

 

 

extern:声明外部符号

比如说有些其他文件里面定义了一个全局变量,那你放在另一个文件里面你需要声明一下这个外部符号。

同样的,引用其他文件的自定义函数也是需要申明的,用extern,不过不写在某些编译器里面也不受影响。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卑微戏子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值