A. 關於c語言auto變數和static變數區別
一、主體不同
1、auto變數:是一個C/C++語言存儲類型,僅在語句塊內部使用。
2、static變數:在計算機編程領域指在程序執行前系統就為之靜態分配存儲空間的一類變數。
二、作用域范圍不同
1、auto變數:初始化可為任何錶達式,其特點是當執行流程進入該語句塊的時候初始化可為任何錶達式。
2、static變數:針對某一源文件的以static聲明的文件級變數與函數的作用域只限於文件內(只在文件內可見),也即「內部連接」,因而可以用來限定變數的作用域。
三、特點不同
1、auto變數:具有自動存儲期的變數在進入聲明該變數的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。
2、static變數:在函數內以static聲明的變數雖然與自動局部變數的作用域相同,但存儲空間是以靜態分配而非默認的自動分配方式獲取的,因而存儲空間所在區域不同。
B. 關於c語言auto變數和static變數區別
auto是自動變數,在C語言中編譯器已給不加關鍵字的定義默認為自動變最,即auto,因此在實際中沒必要加。static是靜態變數,即該變數不會改變,任何賦值都無效,有點類似預處理。
C. c語言的auto和static類型變數
auto型變數在函數被調用時,系統為其分配存儲空間。auto型變數存儲在內存的動態存儲區,函數執行後釋放存儲空間。只有函數的局部變數才能定義為auto類型。在定義局部變數時,如果預設存儲類型,則系統將變數當做auto型處理,即默認為auto型變數。
static型變數存放在內存的靜態存儲區,在編譯時為其分配存儲空間並初始化。若沒有賦值,則默認為0。在函數內定義的靜態變數為靜態局部變數,在函數外定義的靜態變數為靜態全局變數。static型局部變數不因函數結束而消失,當再次進入函數時,變數是上一次函數運行結束後的值。無論什麼情況下,都不能被其它函數情況下調用。
D. c語言中變數儲存auto和static是怎麼用
局部變數按照存儲形式可分為auto, static。
與auto類型(普通)局部變數相比, static局部變數有三點不同:
1. 存儲空間分配不同
auto類型分配在棧上, 屬於動態存儲類別, 占動態存儲區空間, 函數調用結束後自動釋放, 而static分配在靜態存儲區, 在程序整個運行期間都不釋放. 兩者之間的作用域(有效范圍)相同, 但生存期不同.
2. static局部變數在所處模塊在初次運行時進行初始化工作, 且只操作一次。
3. 對於局部靜態變數, 如果不賦初值, 編譯期會自動賦初值0或空字元, 而auto類型的初值是不確定的.
特點: static局部變數的」記憶性」與生存期的」全局性」
所謂」記憶性」是指在兩次函數調用時, 在第二次調用進入時, 能保持第一次調用退出時的值.
注意事項:
1. 「記憶性」, 程序運行很重要的一點就是可重復性, 而static變數的」記憶性」破壞了這種可重復性, 造成不同時刻至運行的結果可能不同.
2. 「生存期」全局性和唯一性. 普通的local變數的存儲空間分配在stack上, 因此每次調用函數時, 分配的空間都可能不一樣, 而static具有全局唯一性的特點, 每次調用時, 都指向同一塊內存, 這就造成一個很重要的問題 ---- 不可重入性!!!
E. C語言中有哪些存儲類型
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。靜態變數只能夠初始化一次。
F. auto在C語言中的意義
C語言中提供了存儲說明符auto,register,extern,static說明的四種存儲類別。四種存儲類別說明符有兩種存儲期:自動存儲期和靜態存儲期。其中auto和register對應自動存儲期。具有自動存儲期的變數在進入聲明該變數的程序塊是被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。
在函數內部定義的變數成為局部變數。在某些C語言教材中,局部變數稱為自動變數,這就與使用可選關鍵字a u t o定義局部變數這一作法保持一致。局部變數僅由其被定義的模塊內部的語句所訪問。換言之,局部變數在自己的代碼模塊之外是不可知的。切記:模塊以左花
括弧開始,以右花括弧結束。
對於局部變數,要了解的最重要的東西是:它們僅存在於被定義的當前執行代碼塊中,即局部變數在進入模塊時生成,在退出模塊時消亡。
定義局部變數的最常見的代碼塊是函數。
整數變數x被定義了兩次,一次在func1()中,一次在func2()中。func1()和func2()中的x互不相關。其原因是每個x作為局部變數僅在被定義的塊內可知。
語言中包括了關鍵字auto,它可用於定義局部變數。但自從所有的非全局變數的預設值假定為auto以來,auto就幾乎很少使用了
G. 在C語言中,什麼是動態存儲,什麼是靜態存儲
動態存儲是auto關鍵字,例如我們定義的int a; 默認就是動態存儲,具體應該是 auto int a;一般是用於函數參數,局部變數,超出作用域范圍會失效,變數產生在動態存儲區
靜態存儲時static關鍵字,例如,我們定義一個 static int a; 就是存儲在靜態存儲區,相當於一個全局變數
一樓的理解出現了問題
H. 關於c語言auto變數和static變數區別
自動變數(auto變數)和靜態變數(static變數)主要有以下幾點區別:
1、static變數存放在靜態存儲區,在程序整個運行期間都不釋放;而auto變數存放在動態存儲區,隨著生命周期的結束而立即釋放。
2、static變數只賦值一次,以後就不用賦值;而auto變數在函數每調用一次都要賦初值。
3、如果用戶不對static變數賦初值,則默認為0或'\0';而auto變數為不確定值。
I. C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍
在C語言中,對變數的存儲類型說明有以下四種:
1、auto 自動變數
2、register 寄存器變數
3、extern 外部變數
4、static 靜態變數
所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。
變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。
1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。
2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。
如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。
(9)c語言auto是動態存儲嗎擴展閱讀:
變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。
一、從作用域看:
1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。
2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。
3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。
4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。
二、從分配空間看:
全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。
全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。
而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。
1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。
2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。
參考資料來源:網路-變數-存儲類型