C 中static 關鍵字

2021-07-02 13:32:12 字數 1982 閱讀 1082

c++包含了c的特性和c++的特性,static 自然也具備了這兩者的特性

靜態全域性變數

• 該變數在全域性資料區分配記憶體;

• 未經初始化的靜態全域性變數會被程式自動初始化為0(自動變數的值是隨機的,除非它被顯式初始化);

• 靜態全域性變數在宣告它的整個檔案都是可見的,而在檔案之外是不可見的; 

靜態區域性變數

在區域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態區域性變數。 我們先舉乙個靜態區域性變數的例子,如下:

void main()

void fn()

通常,在函式體內定義了乙個變數,每當程式執行到該語句時都會給該區域性變數分配棧記憶體。但隨著程式退出函式體,系統就會收回棧記憶體,區域性變數也相應失效。但有時候我們需要在兩次呼叫之間對變數的值進行儲存。通常的想法是定義乙個全域性變數來實現。但這樣一來,變數已經不再屬於函式本身了,不再僅受函式的控制,給程式的維護帶來不便。

靜態區域性變數正好可以解決這個問題。靜態區域性變數儲存在全域性資料區,而不是儲存在棧中,每次的值保持到下一次呼叫,直到下次賦新值。

靜態區域性變數有以下特點:

• 該變數在全域性資料區分配記憶體;

• 靜態區域性變數在程式執行到該物件的宣告處時被首次初始化,即以後的函式呼叫不再進行初始化;

• 靜態區域性變數一般在宣告處初始化,如果沒有顯式初始化,會被程式自動初始化為0;

• 它始終駐留在全域性資料區,直到程式執行結束。但其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束;

靜態函式

#include < iostream >

static void fn();//宣告靜態函式

void main()

void fn()//定義靜態函式

;int myclass::sum=0;//定義並初始化靜態資料成員

myclass::myclass(int a,int b,int c)

void myclass::getsum()

可以看出,靜態資料成員有以下特點:

• 對於非靜態資料成員,每個類物件都有自己的拷貝。而靜態資料成員被當作是類的成員。無論這個類的物件被定義了多少個,靜態資料成員在程式中也只有乙份拷貝,由該型別的所有物件共享訪問。也就是說,靜態資料成員是該類的所有物件所共有的。對該類的多個物件來說,靜態資料成員只分配一次記憶體,供所有物件共用。所以,靜態資料成員的值對每個物件都是一樣的,它的值可以更新;

• 靜態資料成員儲存在全域性資料區。靜態資料成員定義時要分配空間,所以不能在類宣告中定義。在example 5中,語句int myclass::sum=0;是定義靜態資料成員;

• 靜態資料成員和普通資料成員一樣遵從public,protected,private訪問規則;

• 因為靜態資料成員在全域性資料區分配記憶體,屬於本類的所有物件共享,所以,它不屬於特定的類物件,在沒有產生類物件時其作用域就可見,即在沒有產生類的例項時,我們就可以操作它;

• 靜態資料成員初始化與一般資料成員初始化不同。靜態資料成員初始化的格式為:

<資料型別><類名>::<靜態資料成員名>=<值>

• 類的靜態資料成員有兩種訪問形式:

<類物件名>.<靜態資料成員名> 或 <類型別名>::<靜態資料成員名>

如果靜態資料成員的訪問許可權允許的話(即public的成員),可在程式中,按上述格式來引用靜態資料成員 ;

• 靜態資料成員主要用在各個物件都有相同的某項屬性的時候。比如對於乙個存款類,每個例項的利息都是相同的。所以,應該把利息設為存款類的靜態資料成員。這有兩個好處,第一,不管定義多少個存款類物件,利息資料成員都共享分配在全域性資料區的記憶體,所以節省儲存空間。第二,一旦利息需要改變時,只要改變一次,則所有存款類物件的利息全改變過來了;

• 同全域性變數相比,使用靜態資料成員有兩個優勢:

1. 靜態資料成員沒有進入程式的全域性名字空間,因此不存在與程式中其它全域性名字衝突的可能性;

2. 可以實現資訊隱藏。靜態資料成員可以是private成員,而全域性變數不能;

c中static關鍵字

看別人的c 會看到很多變數或者函式前面帶有static關鍵字。c中的static和php中的static有很到的不同,在php中static表示靜態化變數,乙個類中的static成員只與類有關,而與類的例項無關。c中的static關鍵字主要用於隱藏 access control 1.隱藏 函式前的s...

C 中static關鍵字

c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性變...

C 中static關鍵字

1 靜態變數和全域性變數都是在全域性區 靜態區 分配記憶體空間,在整個程式執行期間都不釋放,直到程式結束執行。2 靜態變數和全域性變數只在編譯的時候完成一次賦初值。有時候希望函式中的區域性變數的值在函式呼叫結束後不消失而保留原值,即其占用的記憶體單元不釋放,在 下一次該函式呼叫時,該變數保留上一次函...