[問題] 請問這個C程式如何分析

看板C_and_CPP (C/C++)作者 (Froggen)時間13年前 (2012/09/18 06:55), 編輯推噓2(2013)
留言15則, 7人參與, 最新討論串1/1
有一個程式如下 int foo1(int v) { int a =0; a += v; return a; } int foo2(int v) { static int a = 0; a += v; return a; } int main () { foo1(10); foo2(10); printf("%d %d,foo1(5),foo2(5)); return 0; } ........................................ Ans:5 15 ........................................ 請教一下,為什麼輸出是5和15?? 第一個5我想是因為a += v等於a=a+v;a=0+5=5 那第二個15是怎麼來的@@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.71.14

09/18 07:15, , 1F
1.程式碼有typo小錯誤 2.因為 static int a
09/18 07:15, 1F

09/18 07:48, , 2F
這題是101普考的題目
09/18 07:48, 2F

09/18 08:10, , 3F
printf那行應該是foo1(5), foo2(5)吧?
09/18 08:10, 3F

09/18 08:32, , 4F
感謝指正
09/18 08:32, 4F
※ 編輯: ImFroggen 來自: 140.123.71.14 (09/18 08:33)

09/18 12:01, , 5F
帳號好帥
09/18 12:01, 5F

09/18 20:25, , 6F
但是在foo2()裡面...有static int a = 0...怪怪的
09/18 20:25, 6F

09/18 21:22, , 7F
函式內的static變數只會初使化一次 說穿了它就只是一個涵式
09/18 21:22, 7F

09/18 21:23, , 8F
自己才看得到的global變數... 這些隨便一本書上應該都有寫
09/18 21:23, 8F

09/18 22:19, , 9F
第一次foo2()讓函式內的a變成10 第二次foo2()變成15
09/18 22:19, 9F

09/19 07:49, , 10F
但是static int a=0這段敘述不是已將a設為0了嗎??
09/19 07:49, 10F

09/19 07:50, , 11F
PKmX大的意思是不是說,static int a=0先將a初始化為0。
09/19 07:50, 11F

09/19 07:52, , 12F
然後遇到foo(10)的時候a已經變為10,帶回去時a應該為10
09/19 07:52, 12F

09/19 07:52, , 13F
而不會再被初始化為0:)
09/19 07:52, 13F

09/19 09:51, , 14F
是的,然後第二次執行fool(5)的時候a不會在被初始化
09/19 09:51, 14F

09/19 09:52, , 15F
且a的值不會因為離開的副程式而失效,所以a=10,a+=v
09/19 09:52, 15F
文章代碼(AID): #1GLwfpOP (C_and_CPP)
文章代碼(AID): #1GLwfpOP (C_and_CPP)