关于《C语言深度解剖》一些例程的实验和感悟——关键字static
2013-12-03 00:00
501 查看
最经买了一本好书——《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。
********************************************************************************************************************************/
对于静态变量有两种:一种是静态全局变量;另一种是静态局部变量;
通俗的说来,静态全局变量就是放在静态区的全局变量,变量在程序执行的时候,无论被调用或者使用多少次,变量的值始终保持不变,直到程序执行完后,也不会释放空间,也就是说每一次执行的时候程序的时候,变量的值仍然存在;静态局部变量可能是在某个被调函数内部的一个变量,其作用范围只能作用域这个被调函数,出了被调函数,这个变量是不能够被直接使用的。
下面通过书中的例子来加深一下对这个关键字的印象和感受
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。
********************************************************************************************************************************/
相关文章推荐
- 2013的年终总结
- 2009年个人总结及2010年的工作和生活展望
- 虚拟ISCSI工具推荐 StarWind
- 拿什么来保护你 公司数据(问题提出篇)
- 小议传统分层与新式分层,抑或与DDD分层 推荐
- Linux 命令个人总结====== 未完待续 个人认为比较重要
- 个人总结
- 关于一次装机后的个人总结
- 回顾2014年,展望2015年--个人年度总结
- 回顾2013,展望2014
- 插件式的80后程序员是怎样在夹缝中求生存的 推荐
- nginx错误解决方法个人总结
- 2013年终回顾:水下的世界 推荐
- 虚拟机(vm)上redhat连接Xshell详解
- 2016的个人总结
- linux基础知识个人总结
- web项目打包发布
- C++连接SQL数据库分步骤进行
- 2017学习总结及经验分享
- linux命令个人总结