作者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