欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2193|回復: 7
收起左側

51單片機的局部變量有生存周期這一說嗎,為什么我用KEIL4仿真時監控局部變量的值,

[復制鏈接]
ID:1063563 發表于 2023-10-7 13:16 | 顯示全部樓層 |閱讀模式
51單片機的局部變量有生存周期這一說嗎,為什么我用KEIL4仿真時監控局部變量的值,發現局部變量的數值一直不變都在呢,
不會變沒。MAIN函數大循環時局部變量的值一直都在。也不會變沒。

回復

使用道具 舉報

ID:277550 發表于 2023-10-7 13:31 | 顯示全部樓層
代碼如何的。

局部變量,任何域,就在當前范圍。
回復

使用道具 舉報

ID:1095261 發表于 2023-10-7 13:32 | 顯示全部樓層
沒有吧
回復

使用道具 舉報

ID:744809 發表于 2023-10-7 13:59 | 顯示全部樓層
main函數里定義的局部變量應該是一直都在的。其他函數的局部變量,會在函數返回時釋放
回復

使用道具 舉報

ID:883242 發表于 2023-10-7 14:15 | 顯示全部樓層
標準c語言的局部變量可以看《數據結構》遞歸那一章。

Keil c51不是標準c語言,不搞堆棧分配局部變量那一套,而是采用靜態分配,舉個栗子:

  1. f(){
  2. int i;
  3. }
  4. g(){
  5. int j,k;
  6. }
  7. main(){
  8. f();
  9. g();
  10. }
復制代碼


在這個例子里面,局部變量i和j會共享同一個RAM地址,k就剩下來了,沒有其他函數跟k共享同一個地址。
調用f()會改變g()的局部變量j的值,同樣的調用g()會改變f()的局部變量i的值,但是只要不調用g()那么沒有其他函數會改變k的值。
回復

使用道具 舉報

ID:1063563 發表于 2023-10-12 23:31 | 顯示全部樓層
Hephaestus 發表于 2023-10-7 14:15
標準c語言的局部變量可以看《數據結構》遞歸那一章。

Keil c51不是標準c語言,不搞堆棧分配局部變量那一 ...

為什么局部變量i和j會共享同一個RAM地址呢?
回復

使用道具 舉報

ID:883242 發表于 2023-10-13 05:37 | 顯示全部樓層
芯菲 發表于 2023-10-12 23:31
為什么局部變量i和j會共享同一個RAM地址呢?

編譯器分析出來的,i和j不會同時被使用,共享同一地址節約空間啊!當然你一定要用讓i和k共享同一空間也是可以的,你可以看最后生成的m51文件。
回復

使用道具 舉報

ID:77589 發表于 2023-10-13 14:01 | 顯示全部樓層
任何一個變量,都有生命周期,都有作用范圍。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表