| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 600 人关注过本帖
标题:一个程序两种结果
只看楼主 加入收藏
DoNO1
Rank: 1
等 级:新手上路
帖 子:155
专家分:0
注 册:2008-3-27
收藏
 问题点数:0 回复次数:3 
一个程序两种结果
昨天我在VC++和.net的编译器上做了同样的程序,可是结果确不一样。
#include <stdio.h>
int main(void)
{
    int i=1;
    printf("%4d%4d",++i,++i);
}
在VC++中的结果是3,2;在.net中的结果是3,3;
在VC++我还能理解是怎么算出来的,可是.net是怎么算的这个数呢?
搜索更多相关主题的帖子: 结果 
2008-04-14 08:58
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
没意义

" border="0" />
2008-04-14 09:05
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
回复 1# 的帖子
不同编译器对数据类型的大小定义会有所不同
2008-04-14 09:50
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
[bo]以下是引用 [un]DoNO1[/un] 在 2008-4-14 08:58 的发言:[/bo]

昨天我在VC++和.net的编译器上做了同样的程序,可是结果确不一样。
#include
int main(void)
{
    int i=1;
    printf("%4d%4d",++i,++i);
}
在VC++中的结果是3,2;在.net中的结果是3,3;
在VC++我还能理解是怎么算出 ...


C语言中类似上述问题还有一些.例如,在调用函数时,实参的求值顺序,C标准并没有统一规定.如i的初试值为1,如果有下面的函数调用:
 printf("%d,%d",++i,++i);在有的系统中从左到右计算,输出"2,3" .在多数系统中对函数的求值顺序是自右到左,上面的printf函数中要输出
两个表达试的值(++i和++i),先求出第2个表达试++i的值2(i自加后的值),然后求第1个表达试的值,由于在求第2个表达试前执行了i自加,使i的值变为2,
因此printf函数中第一个参数++i的值为3,所以上面的printf函数输出结果是"3,2".而还有的系统是先将i自加两次然后再输出i的值,故输出"3,3".
总之,不要写出别人看不懂的,也不知道系统会怎么执行的程序.
在看别人的程序时,应该考虑到类似上述问题在不同的系统处理的方法不尽相同.
应该知道使用C语言时可能出问题的地方,以免遇到问题时不知其所以然在论坛上大呼小叫.
使用++和--时常会出现一些人们"想不到"的副作用,初学者应该慎用.

♂ 死后定当长眠,生前何须久睡。♀
2008-04-14 10:52
快速回复:一个程序两种结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014637 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved