1.動態儲存方式與靜態儲存方式
執行結果:
1)函式中的區域性變數(形參、在函式中定義的變數等),如果不專門宣告為static儲存類別,都是動態分配儲存空間的,在函式呼叫時系統給這些變數分配空間,在呼叫結束時系統就自動釋放這些記憶體空間,因此這類區域性變數被稱為自動變數。
2)實際上,關鍵字「auto」可以省略,auto不寫則隱含確定為「自動儲存類別」,也就是動態儲存方式。
3)動態區域性變數存在動態儲存區,靜態區域性變數存在靜態儲存區。
4)靜態區域性變數在程式整個執行期間都不會被釋放,而動態區域性變數在函式呼叫結束就被釋放。
5)靜態區域性變數是在編譯時賦初值的,即只賦初值一次,在程式執行期間它已有初值,在程式執行結束保留最後一次的賦值結果。
動態區域性變數是在函式呼叫時賦初值的,並且每呼叫一次重新賦一次初值。
可以這樣理解,當你敲完**,肯定是先儲存,然後編譯,接下來再考慮執行,所以,在你編譯完後,靜態區域性變數已經被賦初值。
6)如果在定義區域性變數時沒有賦初值,那麼靜態區域性變數在編譯時會自動賦初值0(對數值型變數)或空字元(對字元型變數)。而對自動變數(動態變數)來說,如果不賦初值則它的值是乙個不確定的值。這是由於每次函式呼叫結束後儲存單元已釋放,下次呼叫時又重新分配記憶體單元,而所分配的單元的值是不確定的。
7)雖然靜態區域性變數在函式呼叫結束後依然存在,但是其他函式是不能引用它的。
2.register暫存器變數
1)只有區域性自動變數和形參可以作為暫存器變數,其他(如全域性變數)不行。在呼叫乙個函式時占用一些暫存器存放暫存器變數的值,函式呼叫結束後系統自動釋放掉暫存器裡的暫存器變數,以便在其他函式呼叫時使用。
2)乙個計算機中暫存器數目有限,不能定義任意多個暫存器變數。不同系統允許使用的暫存器個數是不同的,而且對register變數的處理方式不同。有的系統對register變數作自動變數處理,分配動態儲存單元,並不把它們真正放入暫存器中,有的系統只允許將int、char和指標型別變數定義為暫存器變數。
3)區域性靜態變數不能定義為暫存器變數。不能寫成:
register static int a,b,c;
不能把變數a,b,c既放入靜態儲存區中,又放入暫存器中,二者只能選其一。
C語言變數儲存類別
變數除了型別屬性 int char float.外,另外乙個重要屬性就是儲存類別 系統把程式中用到的資料區分為靜態儲存區和動態儲存區。靜態儲存區 在這個區分配了空間的變數,在程式執行過程中一直存在,即相對是不變的。動態儲存區 在這個區分配了空間的變數,可能隨時被釋放,即相對是不斷變化的。c語言提供了...
C語言變數的儲存類別
前面已經介紹了,從變數的作用域 即從空間 角度來分,可以分為全域性變數和區域性變數。從另乙個角度,從變數值存在的作時間 即生存期 角度來分,可以分為 靜態儲存方式 和動態儲存方式。使用者儲存空間可以分為三個部分 程式區 靜態儲存區 動態儲存區。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性...
C 語言變數的儲存類別
儲存類別是變數的屬性之一。在我們定義乙個變數時,其實是有字首的,只是我們通常省略。c 語言有4中變數的儲存類別,分別是auto變數 static變數 register變數 extern變數。不同的變數儲存方式會使變數的生存期不同,生存期表示了變數存在的時間。生存期和變數作用域是從時間和空間這兩個不同...