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

原创 2013年12月03日 00:00:22

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

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

     



相关文章推荐

C语言深度解剖——读书笔记-9、指针和数组

4.4    指针数组和数组指针 4.4.1    指针数组和数组指针的内存布局 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少字节由数组本身决定。它是“存储指针的数组”的简称...
  • Cowena
  • Cowena
  • 2015年08月03日 11:14
  • 423

C语言深度解剖(精讲版)——读书笔记4 &&自己的一些理解

第一章 关键字 void关键字 (感言:很多人认为 void无需重视,其实它很重要) 知识点一:void * 则为“空类型指针”,void *可以指向任何类型的数据; void 真正的作用: ...

C语言深度解剖——读书笔记-11、指针和数组

4.7   函数指针
  • Cowena
  • Cowena
  • 2015年08月03日 19:18
  • 353

C语言深度解剖(精讲版)——读书笔记10 &&自己的一些理解

第三章    预处理   知识点一:预处理指令 预处理名称 意义 #define 宏定义 #undef 撤销已定义过的宏名 #if #e...

C语言深度解剖——读书笔记-10、指针和数组

4.5    多维数组和多级指针 4.5.1    二维数组(重点) 二维数组的布局:只需记住二维数组的存储也是线性的,编译器总是把二维数组看成一个一维数组,而一维数组的每一个元素又是一个数组。...
  • Cowena
  • Cowena
  • 2015年08月03日 15:26
  • 311

C语言深度解剖(精讲版)——读书笔记22-函数指针

第四章   指针和数组   这篇文章写的不好,推荐另一篇好文章地址:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html 函...

C语言深度解剖——读书笔记(数组和指针)

指针的内存布局 先看下面的例子: int *p; 在32 位系统下,不管什么样的指针类型,其大小都为4byte。可以测试一下sizeof(void *)。 int *p = NULL 和*p ...

C语言深度解剖-3-8——gcc编译器学习

定义与声明:定义:所谓定义就是(编译器)创建一个对象,为这个对象分配gcc编译器学习(2010-11-19 10:01:39)转载标签:it gcc and g++分别是gnu的c & c++编译器g...

C语言的深度解剖——读书笔记(基础语法)

auto:编译器在默认的缺省情况下,所有变量都是auto 的 register:register 变量必须是能被CPU 寄存器所接受的类型。意味着register 变量必须是一个单个的值,并且其长度应...

C语言深度解剖(精讲版)——读书笔记18 -指针数组&&数组指针

第四章  指针和数组 指针数组和数组指针(这是我特别容易忘记搞混的内容) 一.指针数组  和数组指针 的内存布局 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少字节由数组本身决定。它...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于《C语言深度解剖》一些例程的实验和感悟——关键字static
举报原因:
原因补充:

(最多只允许输入30个字)