1樓:千鋒教育
c語言中的儲存型別有auto, extern, register, static 這四種,儲存型別說明了該變數要在程序的哪一個段中分配記憶體空間,可以為變數分配記憶體儲存空間的有資料區、bbs區、棧區、堆區。
1. auto儲存型別
auto只能用來標識區域性變數的儲存型別,對於區域性變數,auto是預設的儲存型別,不需要顯示的指定。因此,auto標識的變數儲存在棧區中。
2. extern儲存型別
extern用來宣告在當前檔案中引用在當前專案中的其它檔案中定義的全域性變數。如果全域性變數未被初始化,那麼將被存在bbs區中,且在編譯時,自動將其值賦值為0,如果已經被初始化,那麼就被存在資料區中。全域性變數,不管是否被初始化,其生命週期都是整個程式執行過程中,為了節省記憶體空間,在當前檔案中使用extern來宣告其它檔案中定義的全域性變數時,就不會再為其分配記憶體空間。
3. register儲存型別
宣告為register的變數在由記憶體調入到cpu暫存器後,則常駐在cpu的暫存器中,因此訪問register變數將在很大程度上提高效率,因為省去了變數由記憶體調入到暫存器過程中的好幾個指令週期。
4. static儲存型別
被宣告為靜態型別的變數,無論是全域性的還是區域性的,都儲存在資料區中,其生命週期為整個程式,如果是靜態區域性變數,其作用域為一對{}內,如果是靜態全域性變數,其作用域為當前檔案。靜態變數如果沒有被初始化,則自動初始化為0。靜態變數只能夠初始化一次。
2樓:匿名使用者
自動,靜態,外部,寄存在函式體內宣告的變數在預設情況下都是auto儲存型別
在**塊之間傳遞資訊的一種方法就是使用外部變數。當一個變數在函式的外部被宣告時,安的儲存空間是永久分配的,安人儲存型別是extren.外部變數的宣告看上去和函式或**塊內部所宣告的變數一樣。
外部變數對於它之後的所有函式都有效。在**塊或函式後,外部變數仍然存在。
static的基本用途是允許一個區域性變數在重新進入**塊時能夠保持原來的值。這和自動變數形成了鮮明的對比,自動變數在**塊時會被銷燬,再次進入這個**塊時,它必須重新進行初始化。
register儲存型別告訴編譯器相關的變數應該改量儲存在高速度的暫存器中。使用register儲存型別的目的一般是為了提高執行速度,但是,register宣告只是向編譯器所提出的「建議」,並非強制要求
3樓:匿名使用者
在c語言中,具體的儲存類別有自動(auto)、暫存器(register)、靜態(static)及外部(extern)四種。 靜態儲存類別與外部儲存類別變數存放在靜態儲存區, 自動儲存類別變數存放在動態儲存區, 暫存器儲存類別直接送暫存器。
c語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍
4樓:珈藍惜夢
在c語言中,對變數的儲存型別說明有以下四種:
1、auto 自動變數
2、register 暫存器變數
3、extern 外部變數
4、static 靜態變數
所謂儲存型別是指變數佔用記憶體空間的方式,也稱為儲存方式。
變數的儲存方式可分為「靜態儲存」和「動態儲存」兩種。
1、靜態儲存變數通常是在變數定義時就在儲存單元並一直保持不變,直至整個程式結束。
2、動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放。典型的例子是函式的形式引數,在函式定義時並不給形參分配儲存單元,只是在函式被呼叫時,才予以分配,呼叫函式完畢立即釋放。
如果一個函式被多次呼叫,則反覆地分配、釋放形參變數的儲存單元。從以上分析可知,靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。
擴充套件資料:
變數根據定義的位置的不同的生命週期,具有不同的作用域,作用域可分為6種:全域性作用域,區域性作用域,語句作用域,類作用域,名稱空間作用域和檔案作用域。
一、從作用域看:
1、全域性變數具有全域性作用域。全域性變數只需在一個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包含全域性變數的定義的原始檔需要用extern關鍵字再次宣告這個全域性變數。
2、靜態區域性變數具有區域性作用域,它只被初始化一次,自從第一次被初始化直到程式執行結束一直存在,它和全域性變數的區別在於全域性變數對所有函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見。
3、區域性變數也只有區域性作用域,它是自動物件(auto),它在程式執行期間不是一直存在,而是隻在函式執行期間存在,函式的一次呼叫執行結束後,變數被撤銷,其所佔用的記憶體也被收回。
4、靜態全域性變數也具有全域性作用域,它與全域性變數的區別在於如果程式包含多個檔案的話,它作用於定義它檔案裡,不能作用到其他檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同名字的靜態全域性變數,它們也是不同的變數。
二、從分配空間看:
全域性變數,靜態區域性變數,靜態全域性變數都在靜態儲存區分配空間,而區域性變數在棧裡分配空間。
全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。
而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一個源程式的其他原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其他原始檔中引起錯誤。
1、靜態變數會放在程式的靜態資料儲存區(全域性可見)中,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是它與堆疊變數和堆變數的區別。
2、變數用static告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。
5樓:匿名使用者
c語言中的變數有四種儲存型別,這四種儲存型別的關鍵字分別是auto(自動),extern(外部),static(靜態)和register(暫存器)。
6樓:
我想你說的應該是資料型別吧
沒記錯的話應該有以下幾種:
靜態變數:變數的生存期是從程式開始到結束;
動態變數:在程式執行當中需要呼叫該變數時才為它分配記憶體;
暫存器變數:存在於暫存器中:用於需要高速存取資料的場合
7樓:匿名使用者
棧上,堆上,靜態變數
8樓:珂卡芙9啊
區域性自動型別,靜態區域性型別,靜態全域性型別,全域性型別
c語言中有無符號型別的輸出問題,C語言中有無符號型別的輸出問題
太陽雨 因為short和int型佔的位元組數不一樣,一般來說,int佔四個位元組,short佔兩個位元組 不同的系統分配的位元組數不一樣 他們是以二進位制數存放在記憶體中的。你把 1賦給short型的a,輸出的時候,只取了後面的兩個位元組的內容,那個負號在前兩個位元組中。你把 1賦給int型的a時,...
c語言中有,C語言中有printf 3 0f f6 1f n , fahr,celsius 其中 是什麼意思?
printf 3.0f f6.1f n fahr,celsius 3.0f 的意思是用3位浮點型數來輸出變數fahr的值 小數位為零 f6.1f n 的意思是用6位小數點為1位的浮點型數來輸出變數celsius的值.其中的小數點前後的兩位數分別表示要輸出變數的總位數和它的小數位數。 格式說明的字首 ...
c語言中函式型別有幾種,簡述c語言中函式共有哪幾種型別,各有何區別?
一般包括字元庫函式,數學函式,目錄函式,程序函式,診斷函式,操作函式等。字元庫函式所在函式庫為ctype.h 數學函式所在函式庫為math.h stdio.h string.h float.h 目錄函式所在函式庫為dir.h dos.h 程序函式所在函式庫為stdlib.h process.h。診斷...