读书人

讨论个C语言的有关问题

发布时间: 2012-02-28 13:06:35 作者: rapoo

讨论个C语言的问题
大家知道C语言中的函数调用顺序,但是这个问题我不太明白了.
printf( "%d,%d ",i,i++);
printf( "%d,%d ",i,++i);
printf( "%d,%d ",i++,i);
printf( "%d,%d ",++i,i);
让人捉摸不透哈.顺序不一致呢~~~

高手扎起哦~~~~

[解决办法]
printf( "%d,%d\n ",i,i++);//这种情况显示为:3,2
printf( "%d,%d\n ",i,++i);//这种情况显示为:3,3
printf( "%d,%d\n ",i++,i);//这种情况显示为:2,2
printf( "%d,%d\n ",++i,i);//这种情况显示为:3,2

这样的结果可能比较容易理解 ~~

至于在你使用的编译器下,
为什么会得到那样的结果,
需要分析编译器的行为,
这个没有必要,
因为分析出来也没有用,
这个感觉就是在 找一个合理“借口”,得到某一种结果,
没有任何实际意义 .......
[解决办法]
给你个建议,
如果不是很有把握。就先用i.然后再写一行++

a = i;
i++;

我还真的不知道,编译后有多大的差距,特别是现在的编译器优化还是很厉害的。
就是有一点差距,不是很特别的地方,也没什么影响。等程序都好了在优化就可以了。
[解决办法]
我的理解,printf显示的是执行这行语句后变量的值,所以很容易理解
printf( "%d,%d ",i,i++);//这种情况显示为:3,2 —— 一开始i=2,执行完这条语句后,因为i++,所以i=3,但是i++这个表达式的值还是2

printf( "%d,%d ",i,++i);//这种情况显示为:3,3 ——执行完这条语句 i=3,(++i)也=3
后面两句的解释与前面两句类似,结果没问题
printf( "%d,%d ",i++,i);//这种情况显示为:2,3
printf( "%d,%d ",++i,i);//这种情况显示为:3,3
[解决办法]
这个问题只与c语言的语法规则有关,而与如何实现无关!
无论在什么c编译器中,其结果都是一样的。否则就不能称之为“语言”了
对于:假设i=2
printf( "%d,%d ",i,i++);//这种情况显示为:3,2
printf( "%d,%d ",i,++i);//这种情况显示为:3,3
printf( "%d,%d ",i++,i);//这种情况显示为:2,3
printf( "%d,%d ",++i,i);//这种情况显示为:3,3
第一、二个语句的结果是非正常的,估计是你看错了结果!
printf( "%d,%d ",i,i++);//应该显示为:2,2
printf( "%d,%d ",i,++i);//应该显示为:2,3
如果不是你看错了,那么你使用的c编译器有问题,请放弃使用

尽管c语言非常灵活,但也没有灵活到连语法规则都可以改变!

对于楼上几位“高手”非要把“错误”解释的合情合理的做法,真是佩服的“五体投地”

读书人网 >C语言

热点推荐