<pre name="code" class="cpp">#include<stdio.h>
int fun(int tmp)
{
static int loop;
// printf("loop=%p\n",&loop);
// printf("loop=%d\n",loop);
return(tmp+loop++);
}
static int loop =20;
static int count =5;
int _tmain(int argc, _TCHAR* argv[])
{
int count = 10;
// printf("loop=%d\n",loop);
// printf("loop=%p\n",&loop);
printf("global\t\tlocal static\n");
for (;count>0;)
{
printf("%d\t\t%d\n",count,fun(--count));
}
return 0;
}
程式輸出結果
當時看完程式我給出的答案:local static 那一列全是29,而global那一列則是從10到1,想不到在vs2010上運作結果卻是如此。
接下來說說我的分析好了:首先是static關鍵字,這個可以參考http://blog.csdn.net/daliaojie/article/details/8112845
1、static修飾局部變量時,如果有指派,則會在程式開始時進行初始化工作,且隻操作一次,如果沒有指派,系統會自動賦初值0;
2、static變量和全局變量存儲在靜态存儲區,靜态局部變量可以儲存上一次運作此子產品的值;
3、程式中兩個地方出現的loop是不同的兩個變量,他們配置設定有兩個不同的記憶體位址;将注釋去掉如下圖:
4、printf()語句執行完後count的值已經自減一,是以輸出應從9開始,這是我做筆試題時習慣先把能夠一眼看出的直接寫出來,沒考慮到語句運作完後存儲該值記憶體位址上的值已經改變所緻