作者aaron7713 (HI~~~)
看板C_and_CPP
標題[問題]關於區域變數跟靜態變數..
時間Thu Apr 30 22:47:18 2009
請問一下
區域變數如果不給初值
是否視同靜態區域變數?
我在練習的時候,發現這個問題...
//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
1F:推 legendmtg:沒給初值就拿來用當然是亂七八糟的數 04/30 22:56
2F:→ legendmtg:跟是不是靜態有什麼關係? 04/30 22:56
3F:→ netsphere:等你修了 PL 就知道了 04/30 22:57
4F:→ aaron7713:回legendomtg大 我知道要有變數給初值的習慣 04/30 23:03
5F:→ aaron7713:只是突然想試試看 結果一樣跑的出來 04/30 23:03
6F:→ aaron7713:出來的數跟宣告為靜態變數一樣 所以才有此疑問 04/30 23:04
7F:→ aaron7713:所以請想教一下 "不給初值是不是等同於宣告為靜態變數"? 04/30 23:05
8F:→ netsphere:不是 # 04/30 23:06
9F:→ aaron7713:那為什麼結果會一樣啊?@@ 可以解釋一下嗎? 謝謝 04/30 23:07
10F:→ netsphere:可能有些 compiler 很善良吧 科科 04/30 23:08
11F:推 stonehomelaa:不給初值 就是之前在stack上那裡的值 04/30 23:15
12F:→ stonehomelaa:因為你只有call一個function 所以沒被其他變數洗掉 04/30 23:15
13F:→ aaron7713:大概懂了..多謝各位 另請問一下這種了解變數在記憶體裡 04/30 23:19
14F:→ aaron7713:是什麼狀態,要看什麼書? 04/30 23:20
15F:推 cobrasgo:跑一樣的出來只是"正好"… 05/01 00:05
17F:→ stonehomelaa:"Uninitialized Variables"第7頁開始應該是你想要的 05/01 00:09
18F:→ aaron7713:感謝!! 05/01 00:16
19F:推 sunneo:只是巧合 可能你的程式跑到那裡的時候 同樣的程序上 05/01 00:28
20F:→ sunneo:可能有函式寫到那部份的堆疊 所以現在取得這個值 05/01 00:28