关于静态变量和变量初始化问题

下面四个子函数的代码,起区别就是定义的变量的属性(是不是静态的)以及有没有初始化:
通过下面对代码的简单调试,可以简单的得出:
        static  int  cnt  =  0 ;他仅仅起的是一个初始化的作用,即我认为,在若干次执行test1()函数时, static  int  cnt  =  0 ; 只在第一次test1()函数被调用的时候初始化为0,当test1()第二次或更多次被调用时,cnt为保存的上一次的值。
   对于非静态变量,若不初始化(见test4()函数),它将会是一个随机的数字。在本程序中未被初始化的静态变量(见test3()函数)值为0,但因为用静态变量就是为了要用它的记忆功能,所以最好初始化一下。

点击(此处)折叠或打开

  1. #include <string.h>
  2. #include <stdio.h>

  3. void test1(void)
  4. {
  5.     static int cnt = 0;    //静态变量,初始化为0
  6.     int i;
  7.     printf("-------------test1-------------\n");
  8.     printf("cnt1_1 = %d\n",cnt);
  9.     for (i = 0; i < 2; i++)
  10.     {
  11.         cnt++;
  12.     }
  13.     printf("cnt1_2 = %d\n",cnt);
  14.     printf("\n");
  15. }

  16. void test2(void)
  17. {
  18.     int cnt = 0;        //非静态变量,初始化为0
  19.     int i
  20.     printf("-------------test2-------------\n");
  21.     printf("cnt2_1 = %d\n",cnt);
  22.     for (i = 0; i < 2; i++)
  23.     {
  24.         cnt++;
  25.     }
  26.     printf("cnt2_2 = %d\n",cnt);
  27.     printf("\n");
  28. }

  29. void test3(void)
  30. {
  31.     static int cnt;    //静态变量,未初始化
  32.     int i;
  33.     printf("-------------test3-------------\n");
  34.     printf("cnt3_1 = %d\n",cnt);
  35.     for (i = 0; i < 2; i++)
  36.     {
  37.         cnt++;
  38.     }
  39.     printf("cnt3_2 = %d\n",cnt);
  40.     printf("\n");
  41. }

  42. void test4(void)
  43. {
  44.     int cnt;        //非静态变量,未初始化
  45.     int i;
  46.     printf("-------------test4-------------\n");
  47.     printf("cnt4_1 = %d\n",cnt);
  48.     for (i = 0; i < 2; i++)
  49.     {
  50.         cnt++;
  51.     }
  52.     printf("cnt4_2 = %d\n",cnt);
  53.     printf("\n");
  54. }

  55. int main()
  56. {
  57.     int i;
  58.     for(i = 0; i < 4; i++)
  59.     {
  60.         test1();
  61.         test2();
  62.         test3();
  63.         test4();
  64.     }
  65.     return 0;
  66. }

<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>
阅读(2580) | 评论(5) | 转发(1) |
给主人留下些什么吧!~~

chen_chuang2014-01-25 15:29:05

realyongshi:局部变量是在堆栈中间存储和分配的,每次调用后释放,所以需要进行初始化。局部静态变量和全局变量都是存储在静态区的。

恩,多谢高手

回复 | 举报

realyongshi2014-01-23 14:59:57

局部变量是在堆栈中间存储和分配的,每次调用后释放,所以需要进行初始化。局部静态变量和全局变量都是存储在静态区的。

realyongshi2014-01-23 14:59:54

局部变量是在堆栈中间存储和分配的,每次调用后释放,所以需要进行初始化。局部静态变量和全局变量都是存储在静态区的。

chen_chuang2014-01-20 15:25:25

fireaxe:局部变量是在stack中的,只有在调用这个函数时才临时分配,函数退出时则释放资源,没有固定存储空间,所以使用前需要程序员自己初始化。
静态变量,不管是在函数中的还是在函数外面的,都有固定的存储空间。本质上来说与静态变量就是全局变量。
至于初始化问题,所有未初始化的全局变量与静态变量都会被统一初始化成0

多谢高手指点

回复 | 举报

fireaxe2014-01-17 13:18:44

局部变量是在stack中的,只有在调用这个函数时才临时分配,函数退出时则释放资源,没有固定存储空间,所以使用前需要程序员自己初始化。
静态变量,不管是在函数中的还是在函数外面的,都有固定的存储空间。本质上来说与静态变量就是全局变量。
至于初始化问题,所有未初始化的全局变量与静态变量都会被统一初始化成0

评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值