C 中static的理解

2021-08-26 22:02:59 字數 892 閱讀 5137

c++中static的用法可以分為兩個大類:c風格的static的使用和c++風格的static的使用。

一、c風格的static的使用

1、區域性靜態變數

c風格的區域性靜態變數是在某個函式中定義的static變數,該變數只會被初始化一次,一直存在到程式結束。與普通區域性變數的區別是,只會初始化一次,函式退出後該值依然存在一直到程式執行結束,會自動進行初始化(初始化為0或者空位元組)。其實區域性靜態變數這些功能全域性變數也可以實現但是使用全域性變數總是一件風險比較高的行為,做好使用區域性靜態變數。

2、全域性靜態變數

c風格的全域性

靜態變數實在全域性命名空間中定義的static變數,具有static變數的公有特性。與普通全域性變數的區別是,靜態全域性變數只能在定義的檔案中使用,在其他檔案中不可以訪問。

總體上說區域性靜態變數擴大了區域性變數的作用範圍,靜態全域性變數限制了全域性變數的使用範圍。

二、c++風格的static的使用

1、靜態成員變數

靜態成員變數在標頭檔案中宣告,在cpp檔案中初始化,變數型別 初始化格式類名::變數名=初始化值。如果變數型別是public,可以在別的檔案中訪問,訪問方式為:類名::變數名。靜態成員變數必須進行初始化。

2、靜態成員函式

靜態成員函式只能訪問類中的靜態成員變數和全域性變數,因為它沒有this指標,要想訪問非靜態的成員變數需要將對應物件作為引數傳遞到函式中。其中建構函式和虛函式都不能是static。如果建構函式是靜態的,那麼使用同一建構函式構造的物件都是同乙個顯然是不對的。如果虛函式是static的那麼動態繫結的性質就會丟失,顯然也是不對的。

既可以使用類名也可以使用物件訪問類的靜態函式,最好使用類名,這樣能更清晰的表達靜態函式的意義,屬於整個類而不是某乙個物件。靜態函式可以被繼承,子類可以定義域父類重名的靜態函式,採用過載的機制,但是沒有多型的效果。

C語言static的理解

對c語言,static宣告乙個靜態變數,儲存方式為靜態儲存方式,與全域性變數儲存方式一致,儲存在資料區 靜態區域性變數,宣告時若未賦初值,預設賦初值0,靜態區域性變數只進行一次賦初值,在多次呼叫乙個函式時,該函式中定義的靜態區域性變數會保留上次該函式呼叫時的值。其作用域為該函式,退出後不可再被呼叫,...

static 函式 C 中的static

函式中的靜態變數 當變數宣告為static時,空間將在程式的生命週期內分配,其被存放在在全域性資料區。即使多次呼叫該函式,靜態變數的空間也只分配一次,前一次呼叫中的變數值通過下一次函式呼叫傳遞。這對於在c c 或需要儲存先前函式狀態的任何其他應用程式非常有用。ps 對於乙個完整的程式,在記憶體中的分...

C中static的作用

1.static 變數靜態變數的型別 說明符是 static 靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數。例如外部變數雖屬於靜態 儲存方式,但不一定是靜態變數,必須由 static 加以定義後才能成為靜態外部變數,或稱靜態全域性變數。2.靜態區域性變數 靜態區域性變數...