鱼C论坛

 找回密码
 立即注册
查看: 3425|回复: 3

C语言初学者小问题(关于++--)。。。

[复制链接]
发表于 2012-6-10 19:33:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);/*p=18 i=8*/
q=(++j)+(++j)+(++j);/*q=21 j=8*/
printf("p=%d,q=%d,i=%d,j=%d\n",p,q,i,j);
}

上面这个程序是书里面的一个例子,书上说q最后等于24,为什么我做出来以后是22.。。。求解答谢谢各位大哥、、、、、
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-6-10 20:12:05 | 显示全部楼层
额,在百度上找到答案了、、、、呵呵。。。。分享下、、、
p=15是因为它是先取值再自加1的,所以是5+5+5=15,运算完之后i自加到8
q在不同编译器会出来不同的结果,VC6.0是22,VS2010是24。
对于VC6.0来说,它的运算顺序是:q=((++j)+(++j)) + (++j)  ,也就是先算前两个++j,然后再算加法,所以就是7+7+8
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-11 21:20:05 | 显示全部楼层
这个意思是说 不一样的编译器的 运算符优先等级不一样是么?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-11 21:40:38 | 显示全部楼层

这个并不是优先级的问题,很多人都问这种问题,这都是国内的教材的误导,编程中是不许出现这样的语句的,因为C标准并没有规定这种表达式应该怎么算,只是规定在顺序点(在这里就是分号)结束之前,j自加三次,至于怎么加,每个编译器提供商都可以有自己的标准,所以就会有不同的结果,建议你看C primer plus这本书,里面很多细节解释的很详细
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-13 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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