static和extern的作用域 題目

2022-07-22 14:33:13 字數 918 閱讀 6315

#include int count = 3

;int main(void

) sum += count; //

sum = 4 + 5 = 9;

} printf(

"%d %d\n

",count, sum);

return0;

}

這段**其實考察的是變數作用域的知識,最終答案是4,20,仔細分析一下。

有兩個知識點需要先說明下:

1.static成員存在作用域的問題,static成員並不是在函式內定義了在函式任何部位都可以訪問,而是侷限在大括號之間,也就是在這段大括號內static成員才有效,出了這個大括號就無法訪問。

2.extern這個關鍵字指的是,它告訴編譯器,這個變數已經在其他地方定義了,這裡其他地方可以是其他檔案,也可以是當前檔案,更需要記住的是如果在當前檔案,指的是作為全域性變數存在與某處。

好了,如果以上知道了,就不難說了。

首先:for(; i < count; i += 2,count++)

此處訪問的是main函式第一句話定義的count = 2,然後在這個for迴圈裡面又定義了static count,我們都不管他,因為程式最終輸出的是此處的count,仔細分析,第一次迴圈count=2,然後count++ = 3,然後i變成了2,然後count++ = 4,最後終止,所以最終count輸出的是4.

再來看sum的值,

static int count = 4;

說明在此{}裡面訪問到的將是這個count,但是在接下來的if()裡面又有乙個extern int count,於是乎找到了全域性變數count,接下來就耐心的自己加一下了,同樣,static成員以及extern int count初始化以後就不在初始化了。所以最終sum是20.

static和extern的區別

static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...

static和extern的區別

static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...

static和extern的使用

1 修飾區域性變數 static修飾區域性變數,該區域性變數便存放在靜態資料區,其生命週期一直持續到整個程式執行結束,但作用域仍限於該語句塊。特別注意的是,用static修飾區域性變數後,該變數只在初次執行時進行初始化工作,且只進行一次。includevoid fun int main void 程...