找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 946|回复: 5
收起左侧

C语言局部变量自加的问题

[复制链接]
ID:997026 发表于 2022-4-17 21:14 | 显示全部楼层 |阅读模式
如下的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; 程序就正常了,按按键时,可以自加了。

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

使用道具 举报

ID:944091 发表于 2022-4-17 22:22 来自手机 | 显示全部楼层
加了static进入函数只对unsigned char time_set=1操作一次,不加的话每次进入都操作=1,当你自加1了,下次一进入又=1,相当于没自加
回复

使用道具 举报

ID:624769 发表于 2022-4-17 22:29 来自手机 | 显示全部楼层
把 =1 去掉即可。
回复

使用道具 举报

ID:624769 发表于 2022-4-17 22:33 | 显示全部楼层
把函数内的 unsigned char  time_set =1; 放到函数外, 然后, 把  函数内的 unsigned char  time_set =1; 去掉即可
回复

使用道具 举报

ID:491577 发表于 2022-4-18 00:31 | 显示全部楼层
static unsigned char time_set=1; static是静态变量的意思。简单点说就是只能够被本函数使用的全局变量。 time_set=1只是被执行一次,之后time_set的值一直都会被保存,就像是全局变量。但是别的函数不可以使用这个变量。
回复

使用道具 举报

ID:123289 发表于 2022-4-18 16:34 | 显示全部楼层
关键是:在调用viod time_compute(void)之前,time_set =?
明白这一点就OK了。
调用前:局部变量,是不确定的,=0是对你客气了。
静态变量,你不动它,它不变,所以它会是上次退出时的值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表