请大虾帮忙解释一下这个现象

KimChen 2003-11-22 08:57:14
#include<stdio.h>

main()
{
int i;
int count(int);
for(i=1;i<=10;i++){
count(i);
}
}

int count(int n)
{
int x;
printf("%d:x=%d,",n,x);
x+=2;
printf("x+2=%d",x);
}

因为x没有初始化,所以应该是不确定值,但我怎样试都是同一结果,而且是跟main()中的i是相同的,改i=1为i=3;count()中的x也跟着变,如果把i定义在main()函数外~x的值就真的是不确定值了~~我不明的就是这点,请大虾们发发慈悲,帮忙结实一下?
...全文
30 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
KimChen 2003-11-28
  • 打赏
  • 举报
回复
我查看过了,x和i的地址不同的,既然大家都说不必追究,我也不想了
zhouqingyuan 2003-11-23
  • 打赏
  • 举报
回复
我觉得,对于一个不确定的值,的确没有多大必要去追究的。
junnyfeng 2003-11-23
  • 打赏
  • 举报
回复
x的值的确是不确定,但不确定不代表它每次都不同。在我的机器上用VC运行一下,x的值是-858993460,在for{}的整个循环中,x的值一直是这个,没随i值变而变。
这很正常,至于i放在里面或是外面结果也是一样
michaelli 2003-11-23
  • 打赏
  • 举报
回复
跟系统有关或跟编译器有关,所谓不确定的概念就是什么情况都有可能,

你所遇到的只是一种巧合,或者说这和不确定并不矛盾
heavenb 2003-11-23
  • 打赏
  • 举报
回复
1:x=-858993460,
x+2=-858993458

2:x=-858993460,
x+2=-858993458

3:x=-858993460,
x+2=-858993458

4:x=-858993460,
x+2=-858993458

5:x=-858993460,
x+2=-858993458

6:x=-858993460,
x+2=-858993458

7:x=-858993460,
x+2=-858993458

8:x=-858993460,
x+2=-858993458

9:x=-858993460,
x+2=-858993458

10:x=-858993460,
x+2=-858993458

Press any key to continue
这是我机器的结果~~~
北极猩猩 2003-11-23
  • 打赏
  • 举报
回复
你试试在不同的编译器,不同的操作系统,不同的机器上都试试。
就知道了,每一个都有不同的结果
ilovedonny 2003-11-22
  • 打赏
  • 举报
回复
不清楚
atlcat 2003-11-22
  • 打赏
  • 举报
回复
我想应该是这个样子的吧:
因为你的i和x都是局部变量,声明x的时候,系统分配的空间刚好是i的空间,不知道对不对。
关于把i移到main()外,这个是因为全局变量存放在代码区(局部变量存放在数据区),所以……
Maxwell 2003-11-22
  • 打赏
  • 举报
回复
这个其实不用仔细追究吧,i如果在main内部是分配在栈上的,可能初始化的时候把前后的一起初始化了等等,这个跟编译器或系统有关吧,不用追究.

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧