关闭

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

标签: 个人总结
516人阅读 评论(0) 收藏 举报
分类:

       最经买了一本好书——《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。

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

     



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6827次
    • 积分:114
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条