[問題]關於區域變數跟靜態變數..

看板C_and_CPP (C/C++)作者 (HI~~~)時間16年前 (2009/04/30 22:47), 編輯推噓5(5015)
留言20則, 6人參與, 最新討論串1/1
請問一下 區域變數如果不給初值 是否視同靜態區域變數? 我在練習的時候,發現這個問題... //1+2+3+.....+n int total(int n){ float sum; for (int i=1;i<=n;i++){ sum+=i; } return sum; } int main(void) { total(10); total(10); cout<<total(10); } 本來以為結果應該是55, 卻是165這是為什麼? @@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.22.81

04/30 22:56, , 1F
沒給初值就拿來用當然是亂七八糟的數
04/30 22:56, 1F

04/30 22:56, , 2F
跟是不是靜態有什麼關係?
04/30 22:56, 2F

04/30 22:57, , 3F
等你修了 PL 就知道了
04/30 22:57, 3F

04/30 23:03, , 4F
回legendomtg大 我知道要有變數給初值的習慣
04/30 23:03, 4F

04/30 23:03, , 5F
只是突然想試試看 結果一樣跑的出來
04/30 23:03, 5F

04/30 23:04, , 6F
出來的數跟宣告為靜態變數一樣 所以才有此疑問
04/30 23:04, 6F

04/30 23:05, , 7F
所以請想教一下 "不給初值是不是等同於宣告為靜態變數"?
04/30 23:05, 7F

04/30 23:06, , 8F
不是 #
04/30 23:06, 8F

04/30 23:07, , 9F
那為什麼結果會一樣啊?@@ 可以解釋一下嗎? 謝謝
04/30 23:07, 9F

04/30 23:08, , 10F
可能有些 compiler 很善良吧 科科
04/30 23:08, 10F

04/30 23:15, , 11F
不給初值 就是之前在stack上那裡的值
04/30 23:15, 11F

04/30 23:15, , 12F
因為你只有call一個function 所以沒被其他變數洗掉
04/30 23:15, 12F

04/30 23:19, , 13F
大概懂了..多謝各位 另請問一下這種了解變數在記憶體裡
04/30 23:19, 13F

04/30 23:20, , 14F
是什麼狀態,要看什麼書?
04/30 23:20, 14F

05/01 00:05, , 15F
跑一樣的出來只是"正好"…
05/01 00:05, 15F


05/01 00:09, , 17F
"Uninitialized Variables"第7頁開始應該是你想要的
05/01 00:09, 17F

05/01 00:16, , 18F
感謝!!
05/01 00:16, 18F

05/01 00:28, , 19F
只是巧合 可能你的程式跑到那裡的時候 同樣的程序上
05/01 00:28, 19F

05/01 00:28, , 20F
可能有函式寫到那部份的堆疊 所以現在取得這個值
05/01 00:28, 20F
文章代碼(AID): #19-RdtA_ (C_and_CPP)
文章代碼(AID): #19-RdtA_ (C_and_CPP)