在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天,有什么错误的地方还请大佬们指出来
先生们有何教我?