一个被static 修饰的变量在函数中赋值问题

2019-07-15 12:21发布

本帖最后由 雪飞舞舞 于 2016-12-15 09:48 编辑

step被static所修饰,刚开始step可以从0->1->2这几个步骤都没有问题,执行完step = 3语句,即将退出函数(在下面1处)step 的值莫名其妙的变回2,step变量只有这个地方使用,这个是什么问题???大神们帮忙分析一下什么问题!!!!!
如下程序:
void display()
{
  static u8  step = 0;
      if(step == 0)
  {
        ........
        step = 1;
    }    else if(step == 1)
   {
       step = 2;
   }
    else if(step == 2)
    {
         .......
         step = 3;
    }
    else if(step == 3)
    {
        .........
        step = 4;
    }
}   -------------<1

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
雪飞舞舞
1楼-- · 2019-07-15 12:38
step == 2条件下的语句是 step = 3;不是1
HARRY007
2楼-- · 2019-07-15 17:12
把display的代码贴完吧。单从这几行代码看是没有问题的,可能是其他代码的原因,所以还是贴全代码吧,包括display函数被哪里调用了也描述一下
柠檬守护
3楼-- · 2019-07-15 18:05
我刚刚写了一个代码来进行测试:
  1. #include <stdio.h>                                                                                                                                                                                                                 
  2.   1  
  3.   2 void display(void);
  4.   3  
  5.   4 int main(int argc, char*argv[])
  6.   5 {
  7.   6     display();
  8.   7     display();
  9.   8     display();
  10.   9     display();
  11. 10     display();
  12. 11     display();
  13. 12     display();
  14. 13     return 0;
  15. 14 }
  16. 15  
  17. 16  
  18. 17 void display()
  19. 18 {
  20. 19     static int step = 0;
  21. 20  
  22. 21     if(0 == step)
  23. 22     {
  24. 23         printf("when step = 0, printf step = %d ", step);
  25. 24         step = 1;
  26. 25         printf("if step = 0 done, step = %d ", step);
  27. 26     }
  28. 27     else if(1 == step)
  29. 28     {
  30. 29  
  31. 30         printf("when step = 1, printf step = %d ", step);
  32. 31         step = 2;
  33. 32         printf("if step = 1 done, step = %d ", step);
  34. 33     }
  35. 34     else if(2 == step)
  36. 35     {
  37. 36         printf("when step = 2, printf step = %d ", step);
  38. 37         step = 3;
  39. 38         printf("if step = 2 done, step = %d ", step);
  40. 39     }
  41. 40     else if(3 == step)
  42. 41     {
  43. 42         printf("when step = 3, printf step = %d ", step);
  44. 43         step = 4;
  45. 44         printf("if step = 3 done, step = %d ", step);
  46. 45     }
  47. 46     else
  48.         printf(" I'm here ");
  49.   3     }
  50.   2  
  51.   1     printf("step = %d ",step);
  52. 53  }           
复制代码

测试结果如下:
  1. when step = 0, printf step = 0
  2. if step = 0 done, step = 1
  3. step = 1
  4. when step = 1, printf step = 1
  5. if step = 1 done, step = 2
  6. step = 2
  7. when step = 2, printf step = 2
  8. if step = 2 done, step = 3
  9. step = 3
  10. when step = 3, printf step = 3
  11. if step = 3 done, step = 4
  12. step = 4
  13. I'm here
  14. step = 4
  15. I'm here
  16. step = 4
  17. I'm here
  18. step = 4
复制代码

static修饰的局部变量,可以认为他是全局变量,个人怀疑跟你的display函数的使用有关系
wendaoxyp
4楼-- · 2019-07-15 18:08
 精彩回答 2  元偷偷看……

一周热门 更多>