在 C/C++ 中,static 關鍵字使用恰當能夠大大提高程式的模塊化特性,
static 在 C++ 類之中和在類之外的作用不一樣,在C語言中的作用和在 C++ 類之外的作用相同,下面一一說明:
在類外的作用
1.變數
區域變數
區域變數即是在函式或一個代碼塊內部宣告的變數,
當區域變數被定義時,系統不會對其初始化;
作用域為函式或一個代碼塊;
區域變數儲存在堆疊里,離開作用域就會無效,
在區域變數前面加上關鍵字 static,該變數變為靜態區域變數,
變數在定義時,必須初始化,如果沒有初始化,系統會自動對其初始化,如 int 型初始化為 0;
儲存在全域變數區,一直存在直到程式運行結束,
靜態區域變數相當于一個全域變數!!!
全域變數
全域變數是在函式體外部宣告的變數,
在全域變數區分配存盤空間,且編譯器會自動對其初始化;
作用域為整個程式,即包括所用的源檔案和頭檔案;
其他檔案可以使用extern外部宣告后直接使用,其他檔案不能定義相同的變數,
同樣,在全域變數前面加上關鍵字 static,該變數變為靜態全域變數,
只能在本檔案中訪問,不能在其它檔案中訪問,即便是extern外部宣告也不可以;
作用域只在本檔案;
其他檔案可以定義與其同名的變數,兩者互不影響,
2.函式
函式就是完成特定任務的獨立程式代碼單元,
static 在函式的使用方法是在函式的回傳型別前面加上 static,其作用與全域變數類似,
靜態函式只在宣告它的檔案中可見,其他檔案不能參考該函式;
其他檔案可以定義與其同名的變數,兩者互不影響;
在類中的作用
一個類包含 資料成員 和 成員函式;
資料成員
在資料成員前加上 static 關鍵字,宣告靜態資料成員,
靜態資料成員存盤在全域變數區,靜態資料成員在定義時分配存盤空間;
在使用之前必須初始化,它的初始化在main()之前;
靜態資料成員不屬于任何物件,即使不定義類的任何物件它們也存在,在整個程式中只有一個,而且所有物件都可以對它進行操作;
與靜態全域變數相比,靜態資料成員變數不與程式中的其他全域變數沖突,
成員函式
在成員函式前加上 static 關鍵字,宣告靜態成員函式,其作用與靜態資料成員類似,
靜態成員函式不屬于任何物件,呼叫時,它們無 this 指標,任何物件都可以呼叫;
靜態成員函式不能為 virtual、const 或 volatile;
靜態成員函式的地址可以存盤在常規的函式指標中,但不能存盤于成員函式指標中;
總結
這是我寫的第一篇,有很多不足之處,但寫下去就一定有進步,
static這個關鍵字很有用,可以盡量將只在本檔案使用的全域變數和函式使用 static 關鍵字宣告,同樣,如果類中有一個資料成員對于所有物件來說,如球都是圓的等等,盡量使用 static 宣告,
參考:
cppreference.com
C語言中的static 詳細分析
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/65023.html
標籤:C
上一篇:再整理:Visual Studio Code(vscode)下的通用C語言環境搭建
下一篇:資料結構入門-線性結構
