C語言中變數儲存的類別

C語言根據變數的生存週期來劃分,可以劃分為靜態儲存方式和動態儲存方式。

C語言中變數儲存的類別
  C語言中變數儲存的類別

靜態儲存方式:是指在程式的執行期間分配固定的儲存空間的方式。靜態儲存區中儲存放了在整個程式執行過程中都存在的變數,如全域性變數

動態儲存方式:是指在程式執行期間根據需要進行動態的分配儲存空間的方式。動態儲存區中存放的變數是根據程式執行需要而進行的需要而建立和釋放的。通常包括: 1. 函式形式引數;2. 自動變數;3. 函式呼叫時的現場保護、4. 和返回值地址等。

C語言中的儲存類別又分為4類:

自動(auto)、

靜態(static)、

動態(extern)

暫存器(register)

1、 用關鍵字auto定義的變數為自動變數,auto可以省略,auto不寫則隱含定為”自動儲存類別“,屬於動態儲存方式。

12345int fn(int a)//定義f函式,a為引數 { //定義b,c為自動變數 auto int b,c; }

2、用static修飾的.為靜態變數,如果定義在函式內部,稱之為靜態區域性變數;如果定義在函式外部,稱之為靜態外部變數,

1234567891011121314151617#include <stdio.h> void fn() { static int x =0; x++; printf("fn: x=%d",x); } int main() { int i; for(i=0;j<10;i++) { fn(); } return 0; }</stdio.h>

注意:

靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,在程式整個執行期間都不釋放;

靜態區域性變數在編譯時賦初值,即只賦初值一次;如果在定義區域性變數時,不賦初值的話,則對靜態區域性變數來說,編譯時自動賦初值0.(對數值型變數)或空字元(對字元變數)。

3、為了提高效率,C語言允許將區域性變數得值放在CPU中的暫存器中,這種變數叫”暫存器變數“,用關鍵字register做宣告

1234void fn() { register int i; }

注意:只有區域性自動變數和形式引數可以作為暫存器變數;一個計算機系統中的暫存器數目有限,不能定義任意多個暫存器變數

區域性靜態變數不能定義為暫存器變數。

4、用extern宣告的變數是外部變數,外部變數的意義是某函式可以呼叫在該函式之後定義的變數

1234567#include <stdio.h> int main() { extern int x;//這裡宣告的是外部區域性變數 printf("extern x=%d",x); } int x=100;</stdio.h>

任務:

12345678910111213141516171819#include <stdio.h> void fn() { static int x = 1; x *= 2; printf("x=%d",x); } int main() { int i; for(i=0;i<5;i++) { fn(); } extern int x; printf("x=%d",x); return 0; } int x = 100;</stdio.h>

執行結果是x=2;x=4;x=8;x=16;x=32;x=100