當有人談論變量存儲類說明符時,他們在說什麼?
他們也經常在同一個環境中談論變量鏈接,那是什麼?什麼是變量的鏈接和存儲說明符?
回答
存儲類說明控制存儲和您的變量聯動。這兩個概念是不同的。 C爲變量指定以下說明符:auto,extern,register,static。
存儲
存儲時間決定了你的變量將活多久在RAM中。
有三種類型的存儲時間:靜態,自動和動態。
靜態
如果變量是在文件範圍內聲明的,或者與一個外部或靜態符,就會產生靜態存儲。只要程序正在執行,該變量就會存在。沒有執行時間用於創建這些變量。
自動
如果變量中的函數聲明的,但不的 extern或static說明符,它具有自動存儲。該變量僅在您執行該功能時存在。一旦你回來,變量不再存在。自動存儲通常在堆棧上完成。創建這些變量是一個非常快的操作(只需按大小遞增堆棧指針)。
動態
如果您使用malloc(或新的C++)使用的是動態存儲。此存儲將存在,直到您撥打免費(或刪除)。這是創建存儲的最昂貴的方式,因爲系統必須動態管理分配和取消分配。
鏈接
鏈接指定誰可以查看和引用變量。有三種類型的聯動:內部聯動,外部聯動和不聯動。
沒有聯繫
這個變量只有在它被宣佈可見。通常適用於在函數中聲明的變量。
內部聯動
這個變量將是該文件(稱爲translation unit)中的所有功能,可見,但其他文件將不知道它的存在。
外部鏈接
該變量對其他翻譯單元可見。這些通常被認爲是「全局變量」。
這裏是描述基於所述指示符
Storage Class Function File Specifier Scope Scope ----------------------------------------------------- none automatic static no linkage external linkage extern static static external linkage external linkage static static static no linkage internal linkage auto automatic invalid no linkage register automatic invalid no linkage
變量存儲類或類型說明符的存儲和連接特性(如易失性,汽車和靜態)定義如何/在變量在程序執行期間保存的表。例如,函數中定義的變量通常保存在堆棧中,這意味着函數返回後它將丟失。使用「static」關鍵字,可以強制編譯器將數據段中的變量放入內存中,從而使變量內容在對該函數的調用之間保持不變。 「register」關鍵字會使編譯器儘可能地將變量放在CPU寄存器中,這對循環中的計數器很有用。但是,並不能保證它實際上在寄存器中。
瞭解更多關於類型說明符here。
- 1. 靜態變量存儲說明
- 2. volatile是c中的存儲說明符還是存儲類?
- 3. 是typedef一個存儲類說明符?
- 4. 是什麼存儲「存儲變量所需的內存」的變量和要求的規格有什麼區別?
- 5. 格式說明符中的%是什麼?
- 6. scanf說明符「n」是什麼數字?
- 7. 什麼是HTML 4媒體說明符
- 8. 什麼是嵌套名稱說明符?
- 9. C中limits.h * _MAX常量的正確說明符是什麼?
- 10. C語言中的聲明符說明符是什麼?
- 11. 說明「國家」是什麼
- 12. jquery存儲鏈接到變量
- 13. 以下鏈接中的聲明不需要存儲類說明符static。我對麼?
- 14. 爲什麼在參數聲明中只能使用「register」存儲類說明符?
- 15. 名稱「scanf」和說明符「%g」的起源是什麼?
- 16. 什麼是hh和h格式說明符的需要?
- 17. 變量中的格式說明符?
- 18. 我和f不是變量。將變量存儲到字符串
- 19. Ruby Rake中變量和符號之間的連接是什麼?
- 20. 在VALUES類型說明符中,&OPTIONAL和&REST是什麼意思?
- 21. Android的存儲變量和在web視圖中使用鏈接
- 22. 變量聲明:爲什麼接口
- 23. PHP將超鏈接字符串存儲到變量中Click
- 24. Java:變量訪問說明符
- 25. _cmd的正確字符串說明符是什麼?
- 26. 說明PostgreSQL存儲過程
- 27. 爲什麼編譯器說我沒有聲明我的變量?
- 28. 字符||的作用是什麼?在JavaScript中的變量聲明?
- 29. 說明什麼是「神器」意思是
- 30. 會話中(緩存)和[存儲]變量之間的區別是什麼?
也許應該包括翻譯單元細節的額外位,因爲他們不只是文件...他們是源文件加上任何標題包含在他們(但是間接) – workmad3 2008-09-18 19:21:05
哇... +1。需要注意的是「自動」將改變其含義同的C++ 0x:http://en.wikipedia.org/wiki/C%2B%2B0x爲C++ 11 – paercebal 2008-09-18 19:49:20