关于《C语言深度解剖》一些例程的实验和感悟——关键字static

       最经买了一本好书——《C语言深度解剖》,书比较薄,看的比较快,而且也非常地吸引人,对于其中的一些讲解和例子都非常的经典,感觉有一些新的感悟。可能我的想法和水平非常菜,但是我只想是写点东西出来,写给自己,写给一个即将毕业的苦逼工科男,写给那些曾经偷懒没好好学习的过去,和写些东西安慰现在的自己,表示我过的很踏实。

      对于静态变量有两种:一种是静态全局变量;另一种是静态局部变量;

      通俗的说来,静态全局变量就是放在静态区的全局变量,变量在程序执行的时候,无论被调用或者使用多少次,变量的值始终保持不变,直到程序执行完后,也不会释放空间,也就是说每一次执行的时候程序的时候,变量的值仍然存在;静态局部变量可能是在某个被调函数内部的一个变量,其作用范围只能作用域这个被调函数,出了被调函数,这个变量是不能够被直接使用的。

      下面通过书中的例子来加深一下对这个关键字的印象和感受

static  int  j;

void  fun1 (void)

{

static  int  i  =  0;

i++;

}

void  fun2 (void)

{

j = 0;

j++;

}

int  main(void)

{

int  k = 0;

        for(k=0;k<10;k++)

{

fun1();

fun2();

       }

return 0;

}


/****************************************************************************************************************************

在VC++6.0中实验,最终得出结论,i的值为10,j的值为1;

时间:2013年12月2日23:40:04

收获:通过使用F11功能键,结果在watch窗口中看不到i变量值得变化,

我通过在main中加入printf打印出i和j的值,结果报错了“error C2065: 'i' : undeclared identifier”

我意识到,i变量的作用域只能在fun1函数中,出了函数就无法识别这个变量。所以我换了一种方法,

通过在fun1函数中加入printf,我们可以看到i变量逐步变化的过程,这样最终打印i的结果为10;

再来说说j变量,j变量定义的是静态全局变量,这样的话,j变量的作用域是整个函数,整个函数执行的过程中,

j的值会发生变化,但是为什么是1呢?结果我想到,j变量的值在函数执行一次的时候会在main函数调用fun2

的时候自加1,从0变为1,我一直以为最后输出j的结果是10,后来仔细看看,发现了一个东西在作怪,

就是每次调用fun2的时候,都会把j的值赋值为0,从而使j又从0开始,所以最终j的值保持在1。

********************************************************************************************************************************/

     



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值