• 全部
  • 问答

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

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的值就真的是不确定值了~~我不明的就是这点,请大虾们发发慈悲,帮忙结实一下?
...全文
8 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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内部是分配在栈上的,可能初始化的时候把前后的一起初始化了等等,这个跟编译器或系统有关吧,不用追究.
回复
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-11-22 08:57
社区公告
暂无公告