1.首先在c中:
有乙個區域叫做全域性區或者靜態區,又分為data區和bss區
static修飾區域性變數為了使得變數具有全域性性質,而修飾全域性變數和函式都是為了其他的原始檔不可見這個變數。
static如果修飾函式中的區域性變數,那麼之後這個函式每次呼叫這個變數時,都是使用上次函式執行完成之後該變數的結果。
跟函式外的全域性變數作用有點相似,即這次函式a對這個變數進行修改,那麼函式b使用的就是函式a修改過的結果,但是static區域性變數跟全域性變數還是不一樣,static是僅僅這個函式內部可以改變它,其他函式不可見。
而staic修飾的全域性變數表示這個全域性變數只有這個檔案可見,其他的檔案都不可見。
所以,static修飾過的全域性變數一般不跟extern連用。
因為乙個為了使得其他原始檔看不到這個變數,乙個為了使得其他原始檔可以引用這個全域性變數。
而static修飾的函式就是為了使得其他的原始檔無法使用這個函式。
2.在c++中:
如果static修飾類中的成員函式,因為成員函式本身就是屬於類的,但是呼叫時,為了區分是哪個物件呼叫的,需要傳入this指標。而static成員函式,可以直接通過類進行呼叫。
如果是static修飾的成員變數,因為成員變數本身是屬於物件的,這裡就變成屬於類的,可以直接通過類進行呼叫。
(1)靜態成員函式中不能呼叫非靜態成員。
(2)非靜態成員函式中可以呼叫靜態成員。因為靜態成員屬於類本身,在類的物件產生之前就已經存在了,所以在非靜態成員函式中是可以呼叫靜態成員的。
(3)靜態成員變數使用前必須先初始化(如int myclass::m_nnumber = 0;),否則會在linker時出錯。
C中 static 的用法
對於函式而言,僅僅為隱藏作用。對於變數而言,1 隱藏 2 可以保持變數內容的持久,因為static變數儲存在靜態儲存區只在程式的剛開始完成初始化,唯一的一次初始化 即使在子函式中作靜態變數 若未賦值,則系統自動賦予0值。為自動區域性變數不賦初值的話,其值不定。當編譯多個檔案時,所有未加static字...
static在C和C 中的用法和區別
static主要有三個作用 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 前兩種c和c 都有,第三種僅在c 中有,下面分別作以下介紹 一 區域性靜態變數 在c c 中,區域性變數按照儲存形式可分為三種auto,static,register。其中register不常用到,下...
static在C和C 中的用法和區別
static主要有三個作用 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 前兩種c和c 都有,第三種僅在c 中有,下面分別作以下介紹 一 區域性靜態變數 在c c 中,區域性變數按照儲存形式可分為三種auto,static,register。其中register不常用到,下...