静态变量

#include <stdio.h>
void fun()
{
int i=5;
i++;
printf("i=%d/n",i);
}
void main()
{
fun();
fun();

fun();
fun();
}

运行的结果呢?想必大家很清楚:
i=6
i=6
i=6
i=6

原因是,每当函数退出时,原来的 i就不存在了,也就是说,程序在调
用我们函数时,其中是在内存中生成我们的函数以及里面的定义,而一旦函数退
出,这一段内存就失效了,不存在了,所以第二次调用时,又创建了一次函数与
数据,于是,我们每次创建一次函数,就创建一个变量,于是,变量的值就最终
也逃脱不了 5与
6的恶运,当然,我们有时候需要保持原来的结果,那么就
需要在函数中相应变量前加上 static这样:
void fun()
{
static int i=5;
..................

那么,再次运行程序:
i=6
i=7
i=8
i=9

原来啊,只要使用了 static,那么编译系统看到这个标志时就会仅仅为其
分配一次内容,并且在整个程序的堆上分配,这样一来,只要这个软件运行没有
停止,这个变量就一直保留着,就好像是静态的,所以我们也称之为 "静态变量 "。

静态变量与全局变量的使用差不多,但其只在局部区域有效,所以我们看下
面的程序:
#include <stdio.h>
void fun1()
{
static int i=2;
i+=2;
printf("fun1 :i=%d/n",i);
}
void fun2()
{
static int i=1;
i+=2;
printf("fun2 :i=%d/n",i);
}
void main()
{
fun2();


fun1();
fun2();
fun2();
fun2();
fun1();
fun1();
fun2();
fun1();
}

请大家看下面的运行结果,仔细地去体会
fun2 :i=3
fun1 :i=4
fun2 :i=5
fun2 :i=7
fun2 :i=9
fun1 :i=6
fun1 :i=8
fun2 :i=11
fun1 :i=10

大家是不是发现两个函数中的 i是单独变化的?(注意,奇数肯定是 fun2
的函数,偶数肯定是 fun1的函数)
也就是说,没有万不得已的事情,建议大家不要使用全局变量只使用局部变
量,而如果要这个函数中的定义数据不变,就定义为静态变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值