标题: C语言局部变量自加的问题 [打印本页]

作者: hxdby    时间: 2022-4-17 21:14
标题: C语言局部变量自加的问题
如下的C语言函数:

viod time_compute(void)
{
   unsigned char  time_set =1;
   if(key_num)
   {
      time_set ++;
      if(time_set >1)
      {
         time_set =0;
      }
      key_num=0;
   }
}

key_num是通过按键操作的,按一下,time_set自加1,实际测试时发现,time_set没有执行(没有发生自加),后来稀里糊涂的在unsigned char time_set=1;之前加了static, 变成这样:static unsigned char time_set=1; 程序就正常了,按按键时,可以自加了。

本人小白,初学者,有点搞不明白,为啥会这样呢?

作者: chenchuanke    时间: 2022-4-17 22:22
加了static进入函数只对unsigned char time_set=1操作一次,不加的话每次进入都操作=1,当你自加1了,下次一进入又=1,相当于没自加
作者: 188610329    时间: 2022-4-17 22:29
把 =1 去掉即可。
作者: 188610329    时间: 2022-4-17 22:33
把函数内的 unsigned char  time_set =1; 放到函数外, 然后, 把  函数内的 unsigned char  time_set =1; 去掉即可
作者: hhh402    时间: 2022-4-18 00:31
static unsigned char time_set=1; static是静态变量的意思。简单点说就是只能够被本函数使用的全局变量。 time_set=1只是被执行一次,之后time_set的值一直都会被保存,就像是全局变量。但是别的函数不可以使用这个变量。
作者: yzwzfyz    时间: 2022-4-18 16:34
关键是:在调用viod time_compute(void)之前,time_set =?
明白这一点就OK了。
调用前:局部变量,是不确定的,=0是对你客气了。
静态变量,你不动它,它不变,所以它会是上次退出时的值。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1