爲什麼靜態變量被賦值爲0?靜態和外部變量賦值爲0爲什麼?
0
A
回答
2
因爲標準要求這是真的。
C99標準§6.7.8.10說:
如果具有自動存儲持續時間的對象沒有被明確初始化,它的值是不確定的。如果具有靜態存儲持續時間的對象未被明確初始化,則:
- 如果它具有指針類型,則將其初始化爲空指針;
- 如果它有算術類型,它被初始化爲(正或無符號)零;
- 如果它是一個聚合,每個成員根據這些規則初始化(遞歸);
- 如果它是一個聯合,根據這些規則初始化(遞歸)第一個命名成員。
2
初始化爲0是有意義的 - 它使事情更具可預測性。這個問題應該是「爲什麼堆棧變量不是初始化?」
對此的回答可能是性能 - 初始化堆棧變量需要在每次輸入函數時完成,如果實際上不需要初始化,可能會浪費時間。加載程序時會初始化靜態變量,所以不會花費太多。
1
因爲它們是唯一可以初始化而不會導致運行時性能損失的變量存儲類。
自動存儲類變量(默認值)不會被初始化,因爲它們可能不會被使用。在之內的靜態變量一個函數不能保證被初始化,直到函數被第一次調用。
零是有幾個原因明智一般默認初始化器:它產生一個空字符串字符數組,它啓動一個數組索引數,併產生一個NULL指針等
個人而言,我總是明確初始化靜態甚至歸零。這部分是紀錄片,換句話說,「我真的想要零,不要改變它」。
相關問題
- 1. 爲什麼要爲變量「let」賦值?
- 2. 靜態和外部變量
- 3. Javascript,變量未被賦值...爲什麼?
- 4. Python:爲什麼類變量被賦值?
- 5. 爲什麼最終的靜態變量不能在實例塊中賦值?
- 6. 爲什麼第二個靜態變量賦值不是第一個生效的?
- 7. 爲什麼靜態變量不好?
- 8. 全局靜態變量在本地函數中突然變爲0 - 爲什麼?
- 9. 將值賦給靜態變量的正確方法是什麼?
- 10. 爲什麼在類方法中初始賦值爲零隻發生一次局部靜態變量?
- 11. 爲變量賦值
- 12. 爲什麼變量應聲明爲靜態和最終
- 13. 爲什麼我不能爲測量<UnitMass>變量賦值?
- 14. 如何爲R中的動態變量名賦值0
- 15. 靜態成員變量賦值
- 16. 給靜態變量賦值時出錯
- 17. 靜態變量和靜態變量的區別是什麼?
- 18. 爲什麼C中的靜態局部變量重載?
- 19. 爲什麼變量初始化爲0?
- 20. 爲什麼在賦值時執行靜態屬性的閉包?
- 21. 意外靜態變量地址行爲
- 22. 爲什麼這個布爾變量被賦值爲真?
- 23. 爲什麼變量賦值將空格替換爲空格
- 24. 外部靜態變量的用途是什麼?
- 25. 靜態變量將其值自己重置爲0顯然
- 26. 爲什麼靜態類不能有非靜態方法和變量?
- 27. 爲什麼我會收到「非靜態變量和靜態上下文」錯誤?
- 28. 聲明靜態變量時的輸出是什麼?爲什麼?
- 29. Freemarker爲變量賦值
- 30. 爲共享變量賦值?
Kevin Ballard請你詳細說明你的答案 – 2013-02-12 07:40:25
謝謝Kevin Ballard – 2013-02-12 07:42:35