#include "stdio.h"void incr(){static s=0;++s;printf("%d\n",s);}main(){incr();incr();incr();}
3 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
要是s前面不加static修飾,結果當然就會是111,但加上后,就變成了123,
原因在于靜態局部變量改變了變量的生存期.局部變量是存儲在棧中,但靜態局部變量是存儲在靜態內存區,作用域是整個程序,所以函數每次被調用,對靜態局部變量,不會再對他初始化,它可以記錄函數的調用次數.
但它的作用域沒變,在函數體外還是不能引用它,

函數式編程
TA貢獻1807條經驗 獲得超9個贊
s沒定義.
static int s=0;
表示靜態變量,程序運行完后,仍在內存中,
第一次incr();s=1,輸出1
第2次incr();s=2,輸出2
第3次incr();s=3,輸出3

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
#include "stdio.h"
void incr()
{
static s=0; //static 類型只初始化一次
++s;
printf("%d\n",s);
}
main()
{
incr(); //s=1
incr(); //由于s為static,s的值仍為1,現在++s后變成2
incr(); //3 解釋同上
}
添加回答
舉報
0/150
提交
取消