#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 程...