C語言及C 中static的總結

2021-10-10 01:48:18 字數 1659 閱讀 1455

文章**: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修飾普通變數分為靜態區域性和靜態全域性兩種。靜態全域性變數和靜態函式的作用類似,均只在本檔案內可見,不能為其他檔案所用,故其實也可以將靜態全域性變數和靜態函式作為一類,而靜態...