C語言中static修飾函式和變數用法

2021-10-23 07:16:41 字數 1968 閱讀 3191

在c語言中static關鍵字可以修飾函式和變數。修飾變數又可以分為修飾全域性變數和區域性變數。static作用是限定變數的生命週期,限定變數或函式的作用域。

寫在前面:

變數的生命週期是指,相對於程式執行的程序生命週期,變數存在的時間段。變數的生命週期由變數的儲存型別(位置)決定。因此static的第1種含義也可以理解為,static定義了變數的儲存型別(位置)。

c語言中,變數儲存位置分為棧、全域性靜態區、堆。棧用來做函式呼叫,引數傳遞等,在程式的執行過程中是操作最頻繁的資料區。全域性靜態區,是變數一直存在於記憶體中,在程式整個執行過程中不會被銷毀。堆,是由作業系統維護的大空間記憶體伸縮區,程序可以主動向作業系統申請使用堆的儲存,在程式執行過程中動態申請。

由static修飾的變數,其儲存型別為全域性靜態區,變數在程式的整個執行過程中不會被銷毀,並且只會被初始化1次。

寫個**舉個例子

#include

void

func1()

intmain

(int argc,

char

*ar**)

**輸出:

「var1=2, var2=2」

「var1=3, var2=2」

「var1=4, var2=2」

說明被static修飾的區域性變數生命週期是整個程式,但是作用域是和區域性變數一樣的,從定義開始,到最近的花括號結束

全域性變數預設對其他宣告檔案來說是可見,可用的。在乙個檔案引用了另乙個檔案之後就可以使用這個檔案的全域性變數。static會限定全域性變數的可見域,只在本檔案的任何地方可以訪問,但是對於其他檔案是不可見的。

在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。

函式的定義和宣告預設情況下是extern的,但靜態函式只是在宣告他的檔案當中可見,不能被其他檔案所用。好處:

<1> 其他檔案中可以定義相同名字的函式,不會發生衝突

<2> 靜態函式不能被其他檔案所用。 儲存說明符auto,register,extern,static,對應兩種儲存期:自動儲存期和靜態儲存期。 auto和register對應自動儲存期。具有自動儲存期的變數在進入宣告該變數的程式塊時被建立,它在該程式塊活動時存在,退出該程式塊時撤銷。

關鍵字extern和static用來說明具有靜態儲存期的變數和函式。用static宣告的區域性變數具有靜態儲存持續期(static storage duration),或靜態範圍(static extent)。雖然他的值在函式呼叫之間保持有效,但是其名字的可視性仍限制在其區域性域內。靜態區域性物件在程式執行到該物件的宣告處時被首次初始化。

關鍵字「static」,譯成中文就是「靜態的」,所以內部函式又稱靜態函式。但此處「static」的含義不是指儲存方式,而是指對函式的作用域僅侷限於本檔案。 使用內部函式的好處是:不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名,因為同名也沒有關係。

static在c裡面可以用來修飾變數,也可以用來修飾函式。 用來修飾變數的時候。變數在c裡面可分為存在全域性資料區、棧和堆裡。其實我們平時所說的堆疊是棧而不包含堆,不要弄混。

c語言中static的語義

1.static變數:

1).區域性變數。

a.靜態區域性變數在函式內定義,生存期為整個源程式,但作用域與自動變數相同,只能在定義該變數的函式內使用。退出該函式後, 儘管該變數還繼續存在,但不能使用它。

b.對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。      

2).全域性變數。

全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。但是他們的作用域,非靜態全域性變數的作用域是整個源程式(多個原始檔可以共同使用); 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。

2.static函式(也叫內部函式)

只能被本檔案中的函式呼叫,而不能被同一程式其它檔案中的函式呼叫。區別於一般的非靜態函式(外部函式)。

C語言中static修飾的函式和普通函式的區別

用static修飾的函式,本限定在本原始碼檔案中,不能被本原始碼檔案以外的 檔案呼叫。而普通的函式,預設是extern的,也就是說,可以被其它 檔案呼叫該函式。在函式的 返回型別 前加上關鍵字static,函式就被定義成為靜態函式。普通 函式的定義和宣告預設情況下是extern的,但靜態函式只是在宣...

C語言中static修飾的函式和普通函式的區別

用static修飾的函式,本限定在本原始碼檔案中,不能被本原始碼檔案以外的 檔案呼叫。而普通的函式,預設是extern的,也就是說,可以被其它 檔案呼叫該函式。在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。普通 函式的定義和宣告預設情況下是extern的,但靜態函式只是在宣告他...

C語言 static修飾函式

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。下面是a...