c static 變數的使用和用途

2021-07-14 21:53:08 字數 2074 閱讀 7286

在c語言中,關鍵字static的意思是靜態,它有3個明顯的作用:

1)在函式體內,靜態變數具有記憶功能,即乙個被宣告為靜態的變數在這一函式被呼叫的過程中其值維持不變。

2)在模組內,它的作用是限制變數的作用域,即如果乙個變數被宣告為靜態的,那麼該變數可以被模組內所有函式訪問,但不能被模組外其他函式訪問。他是乙個本地的全域性變數,如果乙個函式被宣告為靜態的,那麼該函式與普通函式作用域不同,其作用域僅在本檔案中,它只可以被模組內的其他函式呼叫,不能被模組外的其他函式呼叫,也就是這個函式被限制在它的模組的本地範圍使用。

3)內部函式應該在當前原始檔中說明和定義,對於可在當前檔案以及當前檔案意外使用的函式,應該在乙個標頭檔案中宣告,使用這下函式的原始檔要包含這個標頭檔案

具體而言,static區域性變數和普通的區域性變數的區別在於static全域性變數值初始化一次,下一次操作的時候static變數會根據上一次得到的結果繼續計算。static函式與普通函式的區別在於,static函式只能在本檔案中被呼叫

在c++中,在類內資料成員的宣告前加上關鍵字static,該資料成員就是類內的靜態資料成員。靜態資料成員有一下特點

對於非靜態資料成員,每個類都有自己的複製品。而靜態資料成員被當做是類的成員。無論這個類的物件被定義多少個,靜態資料成員在程式中也只是乙個複製品,有該類的所有物件訪問。

靜態資料成員儲存在全域性資料區。定義時要分配空間,所以不能在類宣告中定義。由於靜態資料成員屬於本類的所以物件共享,所以它不屬於特定的類物件,在沒有產生類物件時其作用域就可見,即在沒有產生類的例項時,程式設計師也可以使用它。

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

static成員變數的初始化是在類外,此時不能再帶上static的關鍵字。private、protected的static成員雖然可以在類外初始化,但是不能在類外訪問。

與全域性變數相比,使用靜態資料成員有一下二個優勢:

(1)靜態資料成員沒有進入程式的全域性名字空間,因此不存在與程式中其他全域性變數名字衝突的可能性。

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

與靜態資料成員一樣,當類的成員函式新增了static關鍵字後就變為了類的靜態成員函式,靜態成員函式為類的全部服務而不是為某乙個類的具體物件服務。靜態成員函式是累的內部實現,屬於類定義的一部分。普通的成員函式一般都隱含了乙個this指標,this指標指向類的物件本身,因為普通成員函式總是具體的屬於某個類的具體的物件。通常情況下,this是任何的物件相聯絡,因此它不具有this指標。從這個意義上講,它無法訪問屬於類物件的非靜態資料成員,也無法訪問非靜態成員函式,它只能呼叫其餘的靜態成員函式和使用其他靜態成員變數。

為什麼static變數值初始化一次?

對於所以的物件,初始化都只有一次;而由於靜態變數具有記憶功能,初始化後,一直沒有被銷毀,都會儲存在記憶體區域中,所以不會再被初始化。

存放在靜態區的變數生命週期一般比較長,一般與整個源程式同生死、共存亡,所以它只需要初始化一次。而outo變數,即自動變數,由於存放在棧區,一旦呼叫過程結束,就會被立刻銷毀。

分析以下程式**:

#include

void funn(int i)

int main()

程式輸出為:

0 0

0 0

程式每次輸出都為0,是因為value是靜態型別,只會定義一次。也就是說,不管呼叫func()多少次,static int value=i++這個定義語句只會在第一次呼叫的時候執行,由於第一次執行的時候i=0,所以value也就被初始化為0了,以後呼叫fun()都不會再執行這條語句了。

下面,我們再給出乙個例子,供大家自己分析:

#include

void fun(int i)

int main()

{fun(0);

fun(1);

fun(2);

return 0;

輸出結果為:

1 1

2

C static的使用詳解

開發工具與關鍵技術 visual studiostatic靜態的,不變的,在某個類中只有乙個,不會因例項化物件的不同而不同。static可以修飾類 字段 屬性 方法等。如乙個方法前加上static修飾後要對其進行呼叫可以直接通過類名點出來,不用再對類進行例項化 一 靜態類 靜態類與非靜態類的重要區別...

c static變數的初始化

用static宣告的變數或函式,都是屬於類的,而不屬於類物件,所以最好不要在類的建構函式中為static變數初始化 不需要初始化的就不用顧忌了,因為c 缺省會給static變數初化得,比如staitc整型變數,會初始化為0 如果在類的建構函式中初始化static變數,那只有在你new過該類的物件後,...

CStatic控制項的基本使用

cstatic 繼承於 cwnd,是一種特殊的窗體。他可以顯示文字字串 這也是最常用的用法 圖示 指標 cursor 點陣圖和增強 元件.通常靜態控制項不提供輸入和輸出。但是如果把他的屬性設定為 ss notify,他可以通知其父視窗的擊滑鼠事件。一。cstatic 用於顯示文字 如果文字不變,可以...