文章**:c語言和c++中的static總結
c語言中的static
static修飾區域性變數,使其生命週期變長,只在該作用域中使用,離開該作用域。該變數沒有被銷毀,還在記憶體中,即使再一次訪問,還是上一次變數的值,直到程式執行結束才釋放,被static修飾的區域性變數放在靜態區儲存區
static int a = 10;
a = 20;
int c = b;
//請問c為多少? 10;
c++ 中的static
人們希望能有乙個或者幾個資料是乙個類所有的物件共有,比如學生屬性,除了包含自身資訊,成績等,還希望擁有班上學生平均成績,這個平均成績就是每個物件(學生)擁有的,不單單只屬於某個學生的屬性。可以把平均成績設定為全域性變數,但不安全,且破壞類的分裝性,所以引入靜態成員的概念。static可以修飾變數和函式改變了變數的生命週期。
class stu
;//靜態成員變數必須在類外定義
int stu::num = 0;
//靜態成員函式可以在類外(或類內)定義
void stu:: shown()
int main()
static修飾類成員變數
static修飾成員變數:變數在類內宣告,在類外定義,定義時,不需要加static關鍵字;
class student
;//類外初始化靜態成員變數
int student::count = 0;
double student::sum = 0;
//類外初始化析構函式
student::student(int n, char *nm, double s)
//初始化建構函式
student::~student()
void student::shown_infom()
void student::shown_count_sum()
int main()
特性(針對static修飾成員變數)
1.靜態成員(包括變數和成員函式)為所有類物件所共享,不屬於某個物件,是類屬性。
2.靜態成員變數必須在類外初始化,初始化時不新增static關鍵字,不能再建構函式初始化表中。
3.sizeof(物件)大小不包括靜態成員。
特性(針對static修飾的成員函式)
靜態成員函式沒有隱藏的this指標,一般不能訪問任何非靜態成員(非靜態可以訪問靜態),但普通成員有this指標。當呼叫乙個物件的成員函式時(非靜態成員函式),系統會把該物件的起始位址賦給成員函式的this指標。當呼叫乙個物件的成員函式時(非靜態成員函式),系統會把該物件的起始位址賦給成員函式的this指標。但是靜態成員函式不屬於物件的成員函式,與任何物件無關,因此靜態成員函式沒有this指標,
既然沒有指向某一物件,就無法對乙個物件裡的非靜態成員進行預設訪問(即在引用資料成員時不指定物件名)
可以不用通過物件呼叫:
物件.靜態成員,
型別::靜態成員函式名字
因為沒有this指標,所以不能用const修飾;
C語言 static 用法總結
只能被模組內的函式呼叫,不能被模組外的函式呼叫。模組可以理解為當前.c檔案。靜態函式會被自動分配在乙個一直使用的儲存區,直到退出應用程式例項,避免了呼叫函式時壓棧出棧,速度快很多。這句話有待驗證 2.1 作用範圍 只能在當前.c檔案中使用。2.2 儲存位置 靜態資料區。2.3 生命週期 整個程式執行...
C中static學習總結
c 中的static 的作用,要根據上下文有所不同 1.如果修飾 塊外的變數或函式,是修改該變數或函式的鏈結屬性,讓他們只在當前原始檔內可以訪問,在其他原始檔不可訪問,因為預設的情況下,在所有 塊外的變數或函式都是 external 的,在其他的原始檔中都可以訪問,加上 static 的修飾,讓他們...
C 中static用法總結
1 c 語言的 static 關鍵字有三種 1.靜態區域性變數 2.靜態全域性變數 3.靜態函式 注 對應於上面,static修飾普通變數分為靜態區域性和靜態全域性兩種。靜態全域性變數和靜態函式的作用類似,均只在本檔案內可見,不能為其他檔案所用,故其實也可以將靜態全域性變數和靜態函式作為一類,而靜態...