C C 中static的作用

2021-08-14 13:57:41 字數 1384 閱讀 3313

這個簡單的問題很少有人能回答完全。在c語言中,關鍵字static有三個明顯的作用:

1)修飾區域性變數:在函式體內,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變(該變數存放在靜態變數區)。就是說會區域性變數會儲存上一次賦的值

2) 修飾全域性變數:在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。注意,只有在定義了變數後才能使用。如果變數定義在使用之後,要用extern 宣告。所以,一般全部變數都會在檔案的最開始處定義。

3)修飾函式: 在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用。

考點:在嵌入式系統中,要時刻懂得移植的重要性,程式可能是很多程式設計師共同協作同時完成,在定義變數及函式的過程,可能會重名,這給系統的整合帶來麻煩,因此保證不衝突的辦法是顯示的表示此變數或者函式是本地的,static即可。

在linux的模組程式設計中,這一條很明顯,所有的函式和全域性變數都要用static關鍵字宣告,將其作用域限制在本模組內部,與其他模組共享的函式或者變數要export到核心中。

static關鍵字至少有下列n個作用:

(1)設定變數的儲存域,函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;

(2)限制變數的作用域,在模組內的static全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;

(3)限制函式的作用域,在模組內的static函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內;

以下是c++對static的擴充套件

(4)在類中的static成員變數意味著它為該類的所有例項所共享,比如說stu建立了物件stu1和stu2,則stu1和stu2共享a這個靜態成員變數。(static int a)也就是說當某個類的例項修改了該靜態成員變數,其修改值為該類的其它所有例項所見(也就是說修改了stu1中的a,stu2中的a也會跟著變化。);

(5)靜態成員變數必須在類體外進行初始化,如果在宣告的檔案中進行初始化的話,其他檔案重複匯入這個標頭檔案的時候會被重複定義而導致錯誤,一般放在main函式中定義。如果靜態成員比較多的話可以定義在乙個檔案中,然後在main函式所在的那個檔案裡面匯入就行了。

(6)靜態成員變數的訪問方法:

a.和普通變數一樣,(stu *p=&stu1,p->a;   stu &r=stu1,r.a;)

b.類名::靜態成員變數   (stu::a)

(7)定義格式:

型別  類名::靜態成員變數=初值

int  stu :: a=10;

(8)在類中的static成員函式屬於整個類所擁有,這個函式不接收this指標,因而只能訪問類的static成員變數。

例子:

C C 中static的作用

此文引用自 static有什麼作用?答 在c語言中,static主要定義全域性靜態變數,定義區域性靜態變數,定義靜態函式 一 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點 1 在全域性資料區內分配記憶體 2 如果沒有初始化,其...

C C 中Static的作用詳述

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。...

C C 中Static的作用詳述

1.先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c.下面是a.c的內容 char a a global variable voi...