C語言的乙個關鍵字 static

2021-07-31 12:03:54 字數 2469 閱讀 9789



c語言的乙個關鍵字——static

static在c語言裡面有兩個作用,第乙個是修飾變數,第二個是修飾函式

1、static修飾變數

按照作用範圍的不同,變數分為區域性變數全域性變數。如果用static修飾變數,不論這個變數是全域性的還是區域性的都是儲存在靜態資料區。下面分開來講:

¨          如果用static修飾全域性變數,我們稱其為靜態全域性變數。

¨          如果用static修飾區域性變數,我們稱其為靜態區域性變數。

我們用static修飾區域性變數的目的主要有兩個:

1)         在某個函式體裡面定義的靜態區域性變數,只能在本函式體被訪問,即使同乙個檔案的其它函式也訪問不了。

2)         靜態區域性變數總儲存在靜態資料區,所以即使這個函式執行結束,這個靜態區域性變數的值不會被銷毀,函式下次使用時仍然要用到這個值。

下面給出乙個例程:

#include

static int j;// 靜態全域性變數

int fun1(void)

static int i = 0;

i++;

return i;

int fun2(void)

j = 0;

j++;

return j;

int main(int argc, char *argv)

int k = 0, m = 0, n = 0;

for(k=0; k<10; k++){

m = fun1( );

n = fun2( );

printf("%d,%d\n", m, n);

return 0;

結果:1,1

2,1

3,1

4,1

5,1

6,1

7,1

8,1

9,1

10,1

從例程的執行結果可以看出:

對於fun1( ),執行一次之後,變數i保持了原來的資料,並沒有銷毀,而是在下一次呼叫的時候繼續使用,所以才會有1、2、3…10這樣的結果。而對於fun2( ),執行一次之後,變數j的值被銷毀了,所以第二次呼叫結束j仍然保持原值「1」,所以迴圈十次,每次都是1

2、static修飾函式

在函式前加static,則此函式成為靜態函式(內部函式),我們用static修飾函式的主要目的是:用來表示不能被其它檔案訪問的乙個函式(和用static修飾全域性變數的目的一樣,都是不允許其它檔案訪問)。這樣一來便有乙個好處:程式設計師不用擔心自己編寫的函式與其他檔案的函式同名

對區域性靜態變數的特別說明

(1)靜態區域性變數資料屬於靜態儲存類別,在靜態儲存區內分配記憶體單元,在整個程式執行期間都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,佔動態儲存區空間而不占用靜態儲存區空間,函式呼叫結束後立即釋放空間。

(2)靜態區域性變數時在編譯時被賦值的,即自始至終只賦值一次,在程式執行時它已經有初值。以後每次呼叫函式時不再重新賦初值而只是保留上次函式呼叫結束時的值。而自動變數賦初值,不是在編譯時進行的,而是在執行時進行,所以每呼叫一次函式就賦一次初值。

(3)如在定義區域性變數時不賦初值,則對靜態區域性變數來說,編譯時自動賦乙個初值0(對數值型變數)或空字元(對字元變數)。而對自動變數來說,如果不賦初值,則它的值是乙個不確定的值。這是由每次動態分配的記憶體單元不同所決定的。

C語言的乙個關鍵字 static

c語言的乙個關鍵字 static static在c語言裡面有兩個作用,第乙個是修飾變數,第二個是修飾函式。1 static修飾變數 按照作用範圍的不同,變數分為區域性變數和全域性變數。如果用static修飾變數,不論這個變數是全域性的還是區域性的都是儲存在靜態資料區。下面分開來講 如果用static...

C語言的乙個關鍵字 static

c語言的乙個關鍵字 static static在c語言裡面有兩個作用,第乙個是修飾變數,第二個是修飾函式。1 static修飾變數 按照作用範圍的不同,變數分為區域性變數和全域性變數。如果用static修飾變數,不論這個變數是全域性的還是區域性的都是儲存在靜態資料區。下面分開來講 如果用static...

C語言的乙個關鍵字 static

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!c語言的乙個關鍵字 static static在c語言裡面有兩個作用,第乙個是修飾變數,第二個是修飾函式。1 static修飾變數 按照作用範圍的不同,變數分為區域性變數和全域性變數。如果用static修飾變數,不論這個變數是全域性的還是區域性的都...