當前位置:首頁 » 存儲配置 » c存儲類別包括哪幾種

c存儲類別包括哪幾種

發布時間: 2022-12-22 23:09:18

⑴ 舉例寫出c語言的四種存儲類別。

auto:自動變數
auto存儲在內存的堆棧區,屬於臨時性存儲變數,並不長期佔用內存,可以被多次覆蓋。
register:寄存器變數
register與auto一樣屬於自動類別。區別在於register的值保存在CPU的寄存器中。計算機中只有寄存器中的數據才能直接參與運算,而一般變數是放在內存中的,變數參加運算是,需要先把變數從內存中取到寄存器中,然後計算。所以一般把使用最頻繁的變數定義成register變數。register變數只能在函數中定義,並只能是int和char型。
static:靜態變數
static一般存儲在數據區,,這類變數在數據說明時被分配了一定的內存空間,程序運行期間,它占據一個永久的存儲單元,,因此在對出函數後,存儲單元中的值仍舊保留。簡單說,程序運行時static型變數的值可以被語句改變,但當程序運行結束後,其值又變回原來的值。
extern:外部類型
estern變數在數據運行時被分配了一定的內存空間,該空間在整個運行程序中,只要程序存在,自始自終都被該變數使用,即其值始終不變

⑵ c語言中存儲說明符有哪幾種

C語言中提供了存儲說明符auto,register,extern,static說明的四種存儲類別。四種存儲類別說明符有兩種存儲期:自動存儲期和靜態存儲期。其中auto和register對應自動存儲期。具有自動存儲期的變數在進入聲明該變數的程序塊是被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。

在函數內部定義的變數成為局部變數。在某些C語言教材中,局部變數稱為自動變數,這就與使用可選關鍵字a u t o定義局部變數這一作法保持一致。局部變數僅由其被定義的模塊內部的語句所訪問。換言之,局部變數在自己的代碼模塊之外是不可知的。切記:模塊以左花
括弧開始,以右花括弧結束。
對於局部變數,要了解的最重要的東西是:它們僅存在於被定義的當前執行代碼塊中,即局部變數在進入模塊時生成,在退出模塊時消亡。
定義局部變數的最常見的代碼塊是函數。

整數變數x被定義了兩次,一次在func1()中,一次在func2()中。func1()和func2()中的x互不相關。其原因是每個x作為局部變數僅在被定義的塊內可知。
語言中包括了關鍵字auto,它可用於定義局部變數。但自從所有的非全局變數的預設值假定為auto以來,auto就幾乎很少使用了,

⑶ C語言中有哪些存儲類型

四種變數存儲類型。說明符如下:
auto static extern register
一、auto
auto稱為自動變數。
局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進
行說明, 當auto省略時, 所有的非全程變數都被認為是局部變數, 所以auto實際上
從來不用。
二、static
static稱為靜態變數。根據變數的類型可以分為靜態局部變數和靜態全程變數。
1. 靜態局部變數
它與局部變數的區別在於: 在函數退出時, 這個變數始終存在, 但不能被其它
函數使用, 當再次進入該函數時, 將保存上次的結果。其它與局部變數一樣。
2. 靜態全程變數
Turbo C將大型程序分成若干獨立模塊文件分別編譯, 然後將所有模塊
的目標文件連接在一起, 從而提高編譯速度, 同時也便於軟體的管理和維護。靜態
全程變數就是指只在定義它的源文件中可見而在其它源文件中不可見的變數。它與
全程變數的區別是: 全程變數可以再說明為外部變數(extern), 被其它源文件使用,
而靜態全程變數卻不能再被說明為外部的, 即只能被所在的源文件使用。
三、extern
extern稱為外部變數。為了使變數除了在定義它的源文件中可以使用外, 還要
被其它文件使用。因此, 必須將全程變數通知每一個程序模塊文件, 此時可用
extern來說明。
四、register
register稱為寄存器變數。

⑷ 在C語言中,存儲類別包括什麼

1、c語言中的存儲類型有static 、auto、extern、及register,函數默認的存儲類型應該是extern,意思是具有外部鏈接性的。一般來說,會通過extern來聲明函數。
2、比如下面的代碼,在1.c中定義一個函數,函數的聲明寫在1.h頭文件中,在2.c中通過添加1.h的頭文件,來聲明及調用函數f()。

//1.c
void f() { ; }
//1.h
extern void f();
//2.c
#include "1.h"
int main() { f();}

⑸ c語言中形參的預設存儲類別是

c語言中形參或者說所有的變數,預設的存儲類別都是auto的。C語言中四種存儲類別:auto、static、extern、register 。

其中大部分均為auto,auto為默認的類別,一般未標明的都是auto;如果標明了哪種類別,那就按標明的來。

(5)c存儲類別包括哪幾種擴展閱讀:

形參的作用是實現主調函數與被調函數之間的聯系,通常將函數所處理的數據,影響函數功能的因素或者函數處理的結果作為形參。

沒有形參的函數在形參表的位置應該寫int main(void) 函數也可以有形參和返回值,其形參也稱為命令行參數,由操作系統在啟動程序時初始化,其返回值傳遞給操作系統。

形參的特點:

1、形參變數只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變數。

2、實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。

3、實參和形參在數量上,類型上、順序上應嚴格一致,否則就會發生類型不匹配的錯誤。

4、在一般傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參值發生改變,而實參中的值不會變化。而在引用調用的機制當中是將實參引用的地址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。

⑹ 在C語言中,存儲類別包括

TurboC2.0支持四種變數存儲類型。說明符如下:
autostaticexternregister
下面分別來介紹。
一、auto
auto稱為自動變數。
局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進
行說明,當auto省略時,所有的非全程變數都被認為是局部變數,所以auto實際上
從來不用。
局部變數在函數調用時自動產生,但不會自動初始化,隨函數調用的結束,這
個變數也就自動消失了,下次調用此函數時再自動產生,還要再賦值,退出時又自
動消失。
二、static
static稱為靜態變數。根據變數的類型可以分為靜態局部變數和靜態全程變數。
1.靜態局部變數
它與局部變數的區別在於:在函數退出時,這個變數始終存在,但不能被其它
函數使用,當再次進入該函數時,將保存上次的結果。其它與局部變數一樣。
2.靜態全程變數
TurboC2.0允許將大型程序分成若干獨立模塊文件分別編譯,然後將所有模塊
的目標文件連接在一起,從而提高編譯速度,同時也便於軟體的管理和維護。靜態
全程變數就是指只在定義它的源文件中可見而在其它源文件中不可見的變數。它與
全程變數的區別是:全程變數可以再說明為外部變數(extern),被其它源文件使用,
而靜態全程變數卻不能再被說明為外部的,即只能被所在的源文件使用。
三、extern
extern稱為外部變數。為了使變數除了在定義它的源文件中可以使用外,還要
被其它文件使用。因此,必須將全程變數通知每一個程序模塊文件,此時可用
extern來說明。
四、register
register稱為寄存器變數。它只能用於整型和字元型變數。定義符register說
明的變數被TurboC2.0存儲在CPU的寄存器中,而不是象普通的變數那樣存儲在內
存中,這樣可以提高運算速度。但是TurboC2.0隻允許同時定義兩個寄存器變數,
一旦超過兩個,編譯程序會自動地將超過限制數目的寄存器變數當作非寄存器變數
來處理。因此,寄存器變數常用在同一變數名頻繁出現的地方。
另外,寄存器變數只適用於局部變數和函數的形式參數,它屬於auto型變數,
因此,不能用作全程變數。定義一個整型寄存器變數可寫成:
registerinta;
對於以上所介紹的變數類型和變數存儲類型將會在以後的學習中,通過例行程
序中的定義、使用來逐漸加深理解。

⑺ C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍

在C語言中,對變數的存儲類型說明有以下四種:

1、auto 自動變數

2、register 寄存器變數

3、extern 外部變數

4、static 靜態變數

所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。

變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。

1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。

2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。

如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。

(7)c存儲類別包括哪幾種擴展閱讀:

變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。

一、從作用域看:

1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。

2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。

3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。

4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。

二、從分配空間看:

全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。

全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。

而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。

1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。

2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。

參考資料來源:網路-變數-存儲類型

⑻ C語言中怎麼區分動態存儲類別與靜態存儲類別

內存中的變數,其存儲類別有三個方面,分別是作用域,存儲時期和鏈接。
1.作用域分為代碼塊作用域和文件作用域。
2.存儲時期分為靜態,自動和分配。
3.鏈接分為空鏈接,內部鏈接和外部鏈接。
因為全部詳細講的話,字太多,我針對你的問題說說。
首先,具有文件作用域的變數肯定是靜態的。
其次,具有文件作用域的變數默認都是動態的,如果在前面加上static關鍵字,那就變成靜態的了。

⑼ c語言變數的儲存類別及各自的特點

你自己根據需要歸納吧~

C語言變數存儲類型

auto
static
extern
static extern
register

auto 局部變數

auto 變數是用堆棧(stack)方式佔用儲存器空間,因此,當執行此區段是,系統會立即為這個變數分配存儲器空間,而程序執行完後,這個堆棧立即被系統收回.在大括弧{}內聲明.
自動變數就是指在函數內部定義使用的變數。他只是允許在定義他的函數內部使用它。在函數外的其他任何地方都不能使用的變數。自動變數是局部變數,即它的區域性是在定義他的函數內部有效。當然這說明自動變數也沒有鏈接性,因為它也不允許其他的文件訪問他。由於自動變數在定義他的函數的外面的任何地方都是不可見的,所以允許我們在這個函數外的其他地方或者是其他的函數內部定義同名的變數,他們之間不會發生沖突的。因為他們都有自己的區域性,而且它沒有鏈接性(即:不允許其他的文件訪問他的)。來看看自動量的持續性。計算機在執行這個函數的時候,創建並為它分配內存,當函數執行完畢返回後,自動變數就會被銷毀。這個過程是通過一個堆棧的機制來實現的。為自動變數分配內存就壓棧,而函數返回時就退棧。

static 靜態變數

一、局部靜態變數
局部變數按照存儲形式可分為三種auto, static, register。
與auto類型(普通)局部變數相比, static局部變數有三點不同:
1. 存儲空間分配不同
auto類型分配在棧上, 屬於動態存儲類別, 占動態存儲區空間, 函數調用結束後自動釋放, 而static分配在靜態存儲區, 在程序整個運行期間都不釋放. 兩者之間的作用域相同, 但生存期不同.
2. static局部變數在所處模塊在初次運行時進行初始化工作, 且只操作一次。
3. 對於局部靜態變數, 如果不賦初值, 編譯期會自動賦初值0或空字元, 而auto類型的初值是不確定的.
特點: static局部變數的」記憶性」與生存期的」全局性」
所謂」記憶性」是指在兩次函數調用時, 在第二次調用進入時, 能保持第一次調用退出時的值.

注意事項:
1. 「記憶性」, 程序運行很重要的一點就是可重復性, 而static變數的」記憶性」破壞了這種可重復性, 造成不同時刻至運行的結果可能不同.
2. 「生存期」全局性和唯一性. 普通的local變數的存儲空間分配在stack上, 因此每次調用函數時, 分配的空間都可能不一樣, 而static具有全局唯一性的特點, 每次調用時, 都指向同一塊內存, 這就造成一個很重要的問題 ---- 不可重入性!!!
二、外部靜態變數/函數
在C中static有了第二種含義:用來表示不能被其它文件訪問的全局變數和函數。, 但為了限制全局變數/函數的作用域, 函數或變數前加static使得函數成為靜態函數。但此處「static」的含義不是指存儲方式,而是指對函數的作用域僅局限於本文件(所以又稱內部函數)。注意此時, 對於外部(全局)變數, 不論是否有static限制, 它的存儲區域都是在靜態存儲區, 生存期都是全局的. 此時的static只是起作用域限製作用, 限定作用域在本模塊(文件)內部.
使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名。

extern 變數

外部變數 定義在程序外部,所有的函數很程序段都可以使用.

外部變數可能會在某一程序段被重新定義,以段內變數為參考值.

static extern 變數

靜態外部變數和外部變數差別在於,外部變數生命可以同時給多個文件使用,而靜態外部變數則只能給聲明此變數的文件使用.

register 變數

寄存器變數,是由寄存器分配空間,訪問速度比訪問內存快,加快執行速度.寄存器大小有限.

在c語言當中可以使用寄存器變數來優化程序的性能,最常見的是在一個函數體當中,將一個常用的變數聲明為寄存器變數: register int ra; 如果可能的話,編譯器就會為它分配一個單獨的寄存器,在整個函數執行期間對這個變數的操作全都是對這個寄存器進行操作,這時候就不用頻繁地去訪存了,自然就提高了性能。
不能用於全局變數。現在的情況是VC忽略用戶定義的REGISTER,因此定義一個REGISTER變數與不定義一個REGISTER是一樣的,編譯器進行相同的優化,因為MS認為,REGISTER是系統中寶貴的資源,應該由系統統一調配,而且認為VC編譯器的優化能力要大於一般的程序員。因此也有人說register關鍵字在PC機(x86CPU)無用,編譯器按自動變數處理。
注意: register是不能取址的。
register int j; int *p = &j;是錯的,因為無法對寄存器的定址。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:600
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:892
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:585
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:769
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:689
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1016
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:261
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:119
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:809
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:718