變數儲存型別

2021-06-20 04:22:13 字數 1736 閱讀 7013

變數的儲存類有什麼作用?

問題解決:儲存類的作用是用來說明識別符號的作用域和儲存期的。

c語言的變數的完全說明格式為:儲存類 資料型別 變數名

儲存類分為4種:auto(自動型別)static(靜態變數型別)register(暫存器變數型別)extern(外部型別)

變數儲存在記憶體的什麼地方?

問題解決:

第一種是在函式外部定義的變數(全域性變數或靜態外部變數)和在函式內部定義的static變數,這些變數被儲存在資料段中。資料段是在記憶體中為這些變數留出的一段大小固定的空間。

第二種是在函式內部定義的auto變數(不加關鍵字static的變數),這些變數被儲存在棧中。棧是記憶體中的一段空間,開始很小,以後會逐漸自動增大,這個界限由系統決定,大多數系統會將此空間上限設定的足夠大,因此程式設計師不必擔心用盡棧空間。

第三種是記憶體空間,實際上並不儲存變數,但是可以用來儲存變數所指向的資料。如果把呼叫malloc()函式的結果賦給乙個指標變數,那麼這個指標變數將包含一塊動態分配的記憶體的位址,這塊記憶體位於一段名為堆(heap)的記憶體空間中。堆開始時也很小,但當程式設計師呼叫malloc()或calloc()等記憶體分配函式時它會增大。堆可以和資料段或棧共用乙個記憶體段,也可以有它自己的記憶體段,這取決於編譯選項和作業系統。

c語言中變數「壽命」有哪些種類?

問題分析:變數的「壽命」又稱為生存期或存在期,是指整個程式執行過程中,變數的壽命是全域性的還是區域性的。

問題解決:c語言的變數的「壽命」可分為兩類。

第一種是全域性壽命的,指程式從開始到結束一直占用固定的儲存空間。包括外部變數和靜態變數,它們貫穿程式執行的全過程。

第二種是區域性壽命的,只有當程式的執行進入或呼叫了宣告該變數的模組時,才為它臨時分配儲存空間,而當程式的執行退出該變數所在的模組程式時,這一儲存空間就被自動釋放,此變數將會消失。這種變數包括函式體內或分程式內定義的auto類或暫存器類變數,還有函式的形參。

還有一種特定的變數,是由malloc()函式或calloc()函式被動態分配資料的變數,它們是從程式呼叫malloc()函式或calloc()函式開始分配儲存空間,當呼叫free()函式或cfree()函式時釋放記憶體空間。

注:如果在同乙個原始檔中,全域性變數和區域性變數同名,則在程式的內部,全域性變數不起作用。

作用域和「壽命」有什麼關係?

問題解決:變數的作用域和壽命,或者說是變數的存在性和可見性,對自動類、暫存器類和外部類是一致的,即其作用域越大,「壽命」越長;作用域越小,「壽命」越短。在作用域內是存在的,在作用域外是不存在的,這便是一致性的含義。但對靜態類變數來講,作用域和壽命是不一致的。例如,內部靜態類變數的作用域是在定義其函式體內或分程式內,但是「壽命」是長的,還是存在的,即變數的記憶體單元不被釋放,直到整個程式釋放。

為什麼暫存器變數不能隨意使用?

問題分析:暫存器變數作用域和存在性和自動變數相同,區別在於該變數儲存在cpu的暫存器中,因此暫存器變數的訪問速度是最快的。

問題解決:暫存器變數是不可以隨意使用的,有以下幾點限制:

register變數必須是能被cpu暫存器所接受的資料型別,如int、char和指標變數,而不能把乙個組合型別的變數制定為register變數;

register作為宣告暫存器變數儲存類別的關鍵字,不能預設;

因為register變數儲存在cpu中,顯然不應該用取位址運算子&來獲取變數的位址;

如果宣告的暫存器變數過多,超過了cpu的暫存器個數,則多餘的暫存器變數被自動當成自動變數處理。

注:在現今的c語言版本中,register變數的定義已經不必要了,因為編譯程式忽略register修飾符。

變數儲存型別

在c語言中,變數和函式有兩種型別 1 資料型別 資料型別表示資料的含義,取值範圍和允許的操作 2 儲存型別 儲存型別表示資料的儲存介質 記憶體或暫存器 生存期和作用域。靜態儲存方式和動態儲存方式 記憶體中供使用者使用的儲存空間可分為程式區 動態儲存區 靜態儲存區。程式區用來儲存程式 動態儲存區和靜態...

變數的儲存型別

曾巨集安,華清遠見嵌入式學院 講師。我們在程式中會經常定義一些變數來儲存和處理資料。從本質上看,變數代表了一段可操作的記憶體,也可以認為變數是記憶體的符號化表示。當程式中需要使用記憶體時,可以定義某種型別的變數。此時編譯器根據變數的資料型別分配一定大小的記憶體空間。程式就可以通過變數名來訪問對應的記...

變數的儲存型別

儲存型別是從變數的存在時間 即生存期 來劃分變數。變數的儲存型別可分為靜態儲存方式和動態儲存方式。對於動態儲存變數,當程式執行到該變數處時才為其分配儲存空間,當程式執行到該變數所在作用域的結束處時自動收回為其分配的儲存空間,因此它的生存期為所在作用域。在程式開始就執行就為其分配儲存空間,直到程式結束...