找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1347|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

C語言局部變量自加的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:997026 發(fā)表于 2022-4-17 21:14 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如下的C語言函數(shù):

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,實(shí)際測試時(shí)發(fā)現(xiàn),time_set沒有執(zhí)行(沒有發(fā)生自加),后來稀里糊涂的在unsigned char time_set=1;之前加了static, 變成這樣:static unsigned char time_set=1; 程序就正常了,按按鍵時(shí),可以自加了。

本人小白,初學(xué)者,有點(diǎn)搞不明白,為啥會(huì)這樣呢?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:944091 發(fā)表于 2022-4-17 22:22 來自觸屏版 | 只看該作者
加了static進(jìn)入函數(shù)只對(duì)unsigned char time_set=1操作一次,不加的話每次進(jìn)入都操作=1,當(dāng)你自加1了,下次一進(jìn)入又=1,相當(dāng)于沒自加
回復(fù)

使用道具 舉報(bào)

板凳
ID:624769 發(fā)表于 2022-4-17 22:29 來自觸屏版 | 只看該作者
把 =1 去掉即可。
回復(fù)

使用道具 舉報(bào)

地板
ID:624769 發(fā)表于 2022-4-17 22:33 | 只看該作者
把函數(shù)內(nèi)的 unsigned char  time_set =1; 放到函數(shù)外, 然后, 把  函數(shù)內(nèi)的 unsigned char  time_set =1; 去掉即可
回復(fù)

使用道具 舉報(bào)

5#
ID:491577 發(fā)表于 2022-4-18 00:31 | 只看該作者
static unsigned char time_set=1; static是靜態(tài)變量的意思。簡單點(diǎn)說就是只能夠被本函數(shù)使用的全局變量。 time_set=1只是被執(zhí)行一次,之后time_set的值一直都會(huì)被保存,就像是全局變量。但是別的函數(shù)不可以使用這個(gè)變量。
回復(fù)

使用道具 舉報(bào)

6#
ID:123289 發(fā)表于 2022-4-18 16:34 | 只看該作者
關(guān)鍵是:在調(diào)用viod time_compute(void)之前,time_set =?
明白這一點(diǎn)就OK了。
調(diào)用前:局部變量,是不確定的,=0是對(duì)你客氣了。
靜態(tài)變量,你不動(dòng)它,它不變,所以它會(huì)是上次退出時(shí)的值。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表