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就可以了,用staticauto顶替掉

 这时候我们再来测会发现,不管运行多少次,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天,有什么错误的地方还请大佬们指出来

先生们有何教我?

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值