static聲明:靜態(tài)變量

static聲明,可以用于聲明外部變量,內(nèi)部變量,函數(shù)。

  • 這里只討論它作用于變量的情況;
  • 參考資料:《C程序設(shè)計語言》 4.6:靜態(tài)變量;
  • 此處只是梳理一下自己的理解,不一定正確,最好還是自己看書并
    動手實踐。

static 用于聲明外部變量:

  • 變量的作用域縮小
  • 可用于隱藏外部變量
作用域

外部變量使用static聲明后,作用域限定為當(dāng)前源文件,聲明了這個變量之后的部分。

圖1

如圖1所示,在這個文件里,static聲明的作用域為下方的B區(qū)域。
做些實踐來驗證一下:

  int main() {  
  b = 1;   //報錯:使用未聲明變量b。
  return 0;
  }
  static int b =10;

在第二行顯示錯誤:使用未聲明變量b 。

#include <stdio.h>

void test1();//在main函數(shù)之前聲明test函數(shù),不然main函數(shù)沒法調(diào)用。

int main() {
    test1();   
    return 0;
}
static int b =10;

//test函數(shù)的實現(xiàn)
void test1(){
    printf("%d\n",b);//可以使用變量b,因為處于變量b的作用域。
}

如果把最下面那段test1函數(shù)實現(xiàn)的代碼移到static聲明的上方,就會出現(xiàn)錯誤:使用未聲明變量b。

隱藏外部變量

static對于外部變量的作用在于,能夠把自己隱藏起來。
有兩個函數(shù),需要同時使用一個變量,使用外部變量是一個辦法,這樣,兩個函數(shù)都可以訪問這一個變量了。但是如果只希望這兩個函數(shù)使用,而其他函數(shù)不能夠直接訪問這個變量的話,就需要使用static聲明,把這個變量隱藏起來。

static int a;

void push(){
    ......
}
void pop(){
    ......
}

比如說,上面這個變量和兩個函數(shù)寫在一個文件里。那么其他函數(shù)就不能訪問變量a了。


static 用于聲明內(nèi)部變量:

  • 作用域不變
  • 變量不隨函數(shù)調(diào)用和退出而存在和消失

對于作用范圍,變量前加不加static聲明,并不會產(chǎn)生影響。聲明與否,都只能在聲明該變量的函數(shù)里面使用。

聲明static的區(qū)別在于:不論這個函數(shù)是否被調(diào)用,其內(nèi)部聲明的靜態(tài)變量一直存在,而不像沒有聲明static的變量:隨著函數(shù)的調(diào)用和退出而存在和消失(即每次函數(shù)調(diào)用,初始化一次變量。)

void test(){
    staic int c =1;
    printf("%d\n",c);    c++;
}

int main(int argc, const char * argv[]) {
    test();  
    test();
    test();
    return 0;
}

輸出結(jié)果為:

1
2
3

如果去掉static聲明,結(jié)果為:

1
1
1

總結(jié)

什么時候要使用static聲明?

  • 對于外部變量:

    • 為了函數(shù)之間共用一個變量--交流數(shù)據(jù);
    • 但只希望有限的幾個函數(shù)能夠使用這個變量,而不是全部。
  • 對于內(nèi)部變量:

    • 不需要與其他函數(shù)共用變量;
    • 但需要一個持久的變量來記錄一些數(shù)據(jù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,869評論 18 399
  • 1、c語言的函數(shù)有以下特點: (1)才源程序由函數(shù)組成,一個主函數(shù)main()+若干其他函數(shù) C程序中的函數(shù)類似文...
    滕王閣序閱讀 1,530評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 就在今天早晨,我突發(fā)奇想的想去旅游,想來一場說走就走的窮游,不用帶上太多東西,一個雙肩背包,想去深圳看看海,在轉(zhuǎn)...
    最美好不過青春年華閱讀 265評論 3 0
  • 判斷當(dāng)前sdk版本 配置provider
    idioitcbear閱讀 1,807評論 0 0

友情鏈接更多精彩內(nèi)容