C 自我精講 基礎系列四 static

2021-06-16 11:24:18 字數 2172 閱讀 3406

變數的儲存型別:儲存型別按變數的生存期劃分,分動態儲存方式和靜態儲存方式。

1)動態儲存方式的變數,生存期為變數所在的作用域。即程式執行到此變數時才為其分配儲存空間,作用域結束時,會自動收回為其分配的儲存空間。

2)靜態儲存方式的變數,生存期為整個程式執行的過程。即程式開始時就為其分配儲存空間,程式結束時,才會收回為其分配的儲存空間。

4種變數的儲存型別:

1)自動型別(auto):動態儲存方式的變數,區域性變數,auto常常省略。

2)暫存器型別變數(register):動態儲存方式的變數,編譯器不為此型別變數分配儲存空間,而是直接使用cpu的暫存器。訪問速度快,主要用於控制迴圈次數等不需要長期儲存值的變數。

3)外部型別變數(extern):靜態儲存方式的變數,系統自動初始化值,又叫全域性變數,全域性變數是從作用域提出的,外部變數是從儲存方式提出的,表示了它的生存期。

4)靜態儲存變數(static):靜態儲存方式的變數,系統自動初始化值,靜態變數只能在它的作用範圍內使用。

static:靜態儲存變數的型別說明符。

static區域性變數:在函式內的區域性變數型別說明符前加上static說明符就構成靜態區域性變數。區域性變數變為靜態區域性變數,即改變了它的生存期。

void

fun()

1)static區域性變數在函式內定義。

2)static區域性變數的生存期是整個程式。

3)static區域性變數的作用域為函式體內。但再次呼叫定義此函式時,又可繼續使用此變數,而且儲存了前次被呼叫後留下的值。

int

fun1()

intfun2()

int main(int argc, char*argv)

static全域性變數:在全域性變數型別說明符前加上static就構成靜態的全域性變數。全域性變數變成靜態全域性變數,即改變了它的作用域。

1)當乙個源程式由若干個原始檔組成時,在乙個原始檔中定義的外部變數要在其它的原始檔中使用,在使用前就用extern進行外部宣告。

2)如果在乙個原始檔中定義的外部變數不想讓其它原始檔使用,則必須宣告為static全域性變數,只能供所在的原始檔使用。同時可以避免在其它原始檔中引起錯誤。

//

全域性變數

file1.cpp

intgnum;

main()

file2.cpp

extern

intgnum;

main()

//static全域性變數

file3.cpp

static

intgnum;

main()

static類成員變數:類的所有物件都用同乙個static成員變數。通過物件名或類名都可以呼叫。

classa;

a a1,a2;

//建立了兩個a的物件

a1.x = 1; //

a::x = 1;或a2.x = 1;一樣,都是對static int x;操作,x = 1;

a1.y = 1; //

a1物件裡面y = 1;

a2.y = 2; //

a2物件裡面y = 2;

static類成員變數和普通資料成員一樣,不能在類的定義體中初始化,只能在類外進行初始化。但static const卻可以。

int y = 200

;class

a;

static類成員函式:類的所有物件都用同乙個static成員函式。通過物件名或類名都可以呼叫。

1)static類成員函式沒有this指標。

2)static類成員函式不能被宣告為const和虛函式。

3)static類成員函式可以訪問所屬類的static成員變數,但不能使用非static成員變數。

classa;

static

void

fun()

a a1;

a1.fun();

//或a::fun();

C 自我精講 基礎系列六 PIMPL模式

c 自我精講 基礎系列六 pimpl模式 0 前言 很實用的一種基礎模式。1 pimpl解釋 pimpl private implementation 或 pointer to implementation 是通過乙個私有的成員指標,將指標所指向的類的內部實現資料進行隱藏。2 pimpl優點 舉例 ...

C 自我精講 基礎系列三 過載

c 自我精講 基礎系列三 過載 0 前言 分二部分 函式過載,操作符過載。1 函式過載 函式過載 指在同一名字空間中,函式名稱相同,引數型別 順序或數量不同的一類函式,同一函式名的函式能完成不同功能。非函式過載,只是返回值不一樣 void fun int i int fun int i 非函式過載,...

C 自我精講 基礎系列五 隱式轉換和顯示轉換

c 自我精講 基礎系列五 隱式轉換和顯示轉換 1 c 的型別轉換分為兩種,一種為隱式轉換,另一種為顯式轉換。2 c 中應該盡量不要使用轉換,盡量使用顯式轉換來代替隱式轉換。定義 隱式轉換是系統跟據程式的需要而自動轉換的。1 c 型別 char,int,float,long,double等 的隱式轉換...