局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內, 離開該函數后再使用這種變量是非法的。 例如: int f1(int a) /*函數f1*/ { int b,c; …… }a,b,c作用域 int f2(int x) /*函數f2*/ { int y,z; }x,y,z作用域 main() { int m,n; } m,n作用域 在函數f1內定義了三個變量,a為形參,b,c為一般變量。在 f1的范圍內a,b,c有效,或者說a,b,c變量的作用域限于f1內。同理,x,y,z的作用域限于f2內。 m,n的作用域限于main函數內。關于局部變量的作用域還要說明以下幾點:
在C語言中,對變量的存儲類型說明有以下四種: auto 自動變量 register 寄存器變量 extern 外部變量 static 靜態變量 自動變量和寄存器變量屬于動態存儲方式, 外部變量和靜態變量屬于靜態存儲方式。在介紹了變量的存儲類型之后, 可以知道對一個變量的說明不僅應說明其數據類型,還應說明其存儲類型。 因此變量說明的完整形式應為: 存儲類型說明符 數據類型說明符 變量名,變量名…; 例如: static int a,b; 說明a,b為靜態類型變量 auto char c1,c2; 說明c1,c2為自動字符變量 static int a[5]={1,2,3,4,5}; 說明a為靜整型數組 extern int x,y; 說明x,y為外部整型變量 下面分別介紹以上四種存儲類型:
一、自動變量的類型說明符為auto。 這種存儲類型是C語言程序中使用最廣泛的一種類型。C語言規定, 函數內凡未加存儲類型說明的變量均視為自動變量, 也就是說自動變量可省去說明符auto。 在前面各章的程序中所定義的變量凡未加存儲類型說明符的都是自動變量。例如: { int i,j,k; char c; …… }等價于: { auto int i,j,k; auto char c; …… } 自動變量具有以下特點: 1. 自動變量的作用域僅限于定義該變量的個體內。在函數中定義的自動變量,只在該函數內有效。在復合語句中定義的自動變量只在該復合語句中有效。 例如: int kv(int a) { auto int x,y; { auto char c; } /*c的作用域*/ …… } /*a,x,y的作用域*/
2. 自動變量屬于動態存儲方式,只有在使用它,即定義該變量的函數被調用時才給它分配存儲單元,開始它的生存期。函數調用結束,釋放存儲單元,結束生存期。因此函數調用結束之后,自動變量的值不能保留。在復合語句中定義的自動變量,在退出復合語句后也不能再使用,否則將引起錯誤。例如以下程序: main() { auto int a,s,p; printf("/ninput a number:/n"); scanf("%d",&a); if(a>0){ s=a+a; p=a*a; } printf("s=%d p=%d/n",s,p); }