[問題] 給值的問題

看板C_and_CPP作者 (timyau)時間17年前 (2007/04/14 13:32), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
請問在 function 裡面 void f() { int x = 0; } void f() { static int x = 0; } 與 在 function 外面的 global int x = 0; 這幾個動作有什麼不一樣嗎? 不是都是給予 x 初始值 0 嗎? 為什麼有人說是不一樣的? 有人說 global 的 int x = 0; 是給與初始值 static 的 static int x = 0; 也是給予初始值 但是 function 內的 int x = 0; 其實是 int x; x = 0; 這兩個動作。 所以 function 內的 int x = 0; 並不是給予初始值,而是將宣告 x 變數、給予 x 變數的值 = 0 兩個動作合成一塊。 我知道 static 的 function 內部給予初值, 第二次進入的時候初值不會再設定(畢竟已經不是第一次進入了) 所以假設 int f() { static int x = 0; x++; return x; } 呼叫第二次 f() 的結果將會是 2 所以說在 function 裡面的 local 變數 int x = 0; 並不是給予初始值嗎? 請指教。 -- 鄉民們的中心思想是個幹幹的表現是如果不爽就幹如果很爽就補個幹如果太爽大家 陪你一起幹如以幹為本體表現在具體的生活上他媽柏油張爸一起來對美女伸圖對白 爛噓文對嗚溜迷手滑對注音文失敗對對閃光有墨鏡喔批踢踢的中心主版是黑特黑特 的表現是扯到政治就浸扯到版務也浸沒有亂扯就看板主心情如以黑特為海綿體表現 在版上的推文中他媽ㄋㄐ路小比一起來要懂得推齊要心存懷疑要充滿 timyau 幹意 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.31.183.207

04/14 16:35, , 1F
這是變數生命周期的問題
04/14 16:35, 1F

04/14 16:35, , 2F
你給的初值是在變數生成時給的
04/14 16:35, 2F

04/14 16:36, , 3F
直到變數摧毀為止你對變數作的變化會一直保存
04/14 16:36, 3F

04/14 16:37, , 4F
global會在程式開始時生成,static是在程式開始時或是
04/14 16:37, 4F

04/14 16:37, , 5F
第一次近入function時生成,其它function的區域變數
04/14 16:37, 5F

04/14 16:37, , 6F
在進入function時生成,離開時摧毀
04/14 16:37, 6F

04/14 16:39, , 7F
你可以把static看成只有該function才看得見的global變數
04/14 16:39, 7F

04/14 17:28, , 8F
所以其實function內的int x=0; 也是給初值嘛..感謝指導
04/14 17:28, 8F
文章代碼(AID): #1686Tsub (C_and_CPP)