LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1760|回复: 37

结果怎么不一样了??

[复制链接]
发表于 2003-6-10 10:47:42 | 显示全部楼层 |阅读模式
main()
{
int i,a[10];
for(i=0;i<9;i++)
a=i;
for(i=9;i>0;i--)
printf("%d",a);
}

输出的结果是:

107379260887654321

可书上写的结果是 9 8 7 6 5 4 3 2 1

这什么原因啊???

还有一个, (i++)+(i++)+(i++)如果i=3,书上的结果是12

可我的是9 -1073750472 134513486[root@Snoopy hello]#

怎么这样啊 ,,问题出在哪里呢??
发表于 2003-6-10 11:15:23 | 显示全部楼层
第一个,你的条件是 i<9,所以 a[9] 没有初始化,你看你的结果从8开始是正确的。
发表于 2003-6-10 11:16:49 | 显示全部楼层
看看你的输出结果:
107379260887654321
那里给a[9]赋值了?
发表于 2003-6-10 12:08:12 | 显示全部楼层
试图接触为定义的内存,杀!
发表于 2003-6-10 12:19:40 | 显示全部楼层
(i++)+(i++)+(i++)
这种表达式最好不要写,根据C语言标准这种表达式的计算顺序是未定义的,也就是说它的计算顺序是和实现相关的,不同的编译器会有不同的结果,就像f(x) + g(x),先调用f(x)或g(x)是不一定的,和编译器有关。
你看的什么书呀?如果书上给出了这种表达式,并且说应该等于多少,那么这本书就不值得看,谁知道还有多少错误。
发表于 2003-6-10 12:27:47 | 显示全部楼层
上面这个表达式确实不应该写
程序是写给别人看的

如果大家看了都觉得应该是这样
但结果如果不是的话那么就会出现bug

好的代码应该是让大家看了知道
肯定是这样
 楼主| 发表于 2003-6-10 14:00:13 | 显示全部楼层
这个版的人太好了,呵呵 ,,,谢谢你们,,,,
 楼主| 发表于 2003-6-10 14:22:46 | 显示全部楼层
我制造了个makefile后,是用make编译,然后./***的

不知道这会不会影响编译的过程,结果老是不一样也,,,

ain()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
printf("%d",a);
}
输出的应该是1,2,3,4,5,6,7,8,9   这是我自己的想法,不是书上的

结果却是,,-1073751808

是不是我操作方面问题不对头啊???
发表于 2003-6-10 14:24:27 | 显示全部楼层
我靠!你这样输出的是a[0]的内存地址!
又一个非法使用内存,杀!
 楼主| 发表于 2003-6-10 14:35:32 | 显示全部楼层
非法使用内存,可我不知道怎样使用才合法!!

可好奇怪,这每一次运行结果都不一样!!!!

而你说的输出的是a[0]的内存地址????不懂啊,,,看书看了一半

还不能全理解,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表