下面四个子函数的代码,起区别就是定义的变量的属性(是不是静态的)以及有没有初始化:
通过下面对代码的简单调试,可以简单的得出:
static int cnt = 0 ;他仅仅起的是一个初始化的作用,即我认为,在若干次执行test1()函数时, static int cnt = 0 ; 只在第一次test1()函数被调用的时候初始化为0,当test1()第二次或更多次被调用时,cnt为保存的上一次的值。
对于非静态变量,若不初始化(见test4()函数),它将会是一个随机的数字。在本程序中未被初始化的静态变量(见test3()函数)值为0,但因为用静态变量就是为了要用它的记忆功能,所以最好初始化一下。
阅读(2580) | 评论(5) | 转发(1) |
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
通过下面对代码的简单调试,可以简单的得出:
static int cnt = 0 ;他仅仅起的是一个初始化的作用,即我认为,在若干次执行test1()函数时, static int cnt = 0 ; 只在第一次test1()函数被调用的时候初始化为0,当test1()第二次或更多次被调用时,cnt为保存的上一次的值。
对于非静态变量,若不初始化(见test4()函数),它将会是一个随机的数字。在本程序中未被初始化的静态变量(见test3()函数)值为0,但因为用静态变量就是为了要用它的记忆功能,所以最好初始化一下。
点击(此处)折叠或打开
- #include <string.h>
- #include <stdio.h>
-
- void test1(void)
- {
- static int cnt = 0; //静态变量,初始化为0
- int i;
- printf("-------------test1-------------\n");
- printf("cnt1_1 = %d\n",cnt);
- for (i = 0; i < 2; i++)
- {
- cnt++;
- }
- printf("cnt1_2 = %d\n",cnt);
- printf("\n");
- }
-
- void test2(void)
- {
- int cnt = 0; //非静态变量,初始化为0
- int i;
- printf("-------------test2-------------\n");
- printf("cnt2_1 = %d\n",cnt);
- for (i = 0; i < 2; i++)
- {
- cnt++;
- }
- printf("cnt2_2 = %d\n",cnt);
- printf("\n");
- }
-
- void test3(void)
- {
- static int cnt; //静态变量,未初始化
- int i;
- printf("-------------test3-------------\n");
- printf("cnt3_1 = %d\n",cnt);
- for (i = 0; i < 2; i++)
- {
- cnt++;
- }
- printf("cnt3_2 = %d\n",cnt);
- printf("\n");
- }
-
- void test4(void)
- {
- int cnt; //非静态变量,未初始化
- int i;
- printf("-------------test4-------------\n");
- printf("cnt4_1 = %d\n",cnt);
- for (i = 0; i < 2; i++)
- {
- cnt++;
- }
- printf("cnt4_2 = %d\n",cnt);
- printf("\n");
- }
-
- int main()
- {
- int i;
- for(i = 0; i < 4; i++)
- {
- test1();
- test2();
- test3();
- test4();
- }
- return 0;
- }
相关热门文章
给主人留下些什么吧!~~
chen_chuang2014-01-25 15:29:05
realyongshi:局部变量是在堆栈中间存储和分配的,每次调用后释放,所以需要进行初始化。局部静态变量和全局变量都是存储在静态区的。
恩,多谢高手
回复 | 举报chen_chuang2014-01-20 15:25:25
fireaxe:局部变量是在stack中的,只有在调用这个函数时才临时分配,函数退出时则释放资源,没有固定存储空间,所以使用前需要程序员自己初始化。
静态变量,不管是在函数中的还是在函数外面的,都有固定的存储空间。本质上来说与静态变量就是全局变量。
至于初始化问题,所有未初始化的全局变量与静态变量都会被统一初始化成0
多谢高手指点
回复 | 举报
评论热议