鱼C论坛

 找回密码
 立即注册
查看: 2673|回复: 12

关于++ -- 运算符的迷茫?????

[复制链接]
发表于 2013-12-16 16:23:20 | 显示全部楼层 |阅读模式

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

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

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


请问  上面的程序和下面的程序和下面的有什么不同 答案都一样 啊
#include <stdio.h>
void main()
{
   int i = 5,j = 5,p,q;
   p = (i++)+(i++)+(i++);
   q = (++j)+(++j)+(++j);
   printf("%d,%d,%d,%d\n",p,q,i,j);
}
严重搞不明 p,q 的值怎么算出来的 15 , 22

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-16 16:37:02 | 显示全部楼层
不要迷茫了,这个连C语言标准都未做过全面的定义,各编译器不同,所以还是加括号比较好,这题没法说,和编译器有关,gcc和VC都有可能不同。看开发的人了

评分

参与人数 1鱼币 +1 贡献 +1 收起 理由
白铯。。囙忆 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 16:55:30 | 显示全部楼层
本帖最后由 正在写代码 于 2013-12-16 16:57 编辑

  p = (i++)+(i++)+(i++)
首先i++的后缀形式是指先计算然后再增加i的值,也就是说  p = (i++)+(i++)+(i++) 这个表达式的意思就是先计算p=i+i+i 即等于15  接着看 i这个值 随着i++的进行 那么i的旨在增加第一次i++=6 第二次i++=7 第三次 i++=8 所以最后i的值是8,这里不要把i和p搅为一团。

q = (++j)+(++j)+(++j);
++j这种前缀模式是指在表达式计算前就开始进行,也就是说j必须先要自增。但是对于此题问题就出在,如果这样计算那么q=6+7+8=21,不过编译器告诉我们这个答案是错误的,为什么呢?因为加法必须得有两个数,而且要满足从左到右计算,也就是说,第一次++j=6 但是只有一个值,然后进行下一步 (++j)+(++j) 此时有两个值了,但是又遇见了一个++j也就是说刚才的j=6已经变成了7,那么此时的 (++j)+(++j)=7+7.最后(++j)+(++j)+(++j)=7+7+8=22,而此时j=8。

挺绕的,希望你自己再好好理解一下

评分

参与人数 1鱼币 +1 贡献 +1 收起 理由
白铯。。囙忆 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 17:15:41 | 显示全部楼层
我昨天看书才看到这里,运算符++,--的优先级大于+ A$DJW@W8{9}3_YP)X0UY~A1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 19:34:42 | 显示全部楼层

非常感谢  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 19:35:25 | 显示全部楼层
正在写代码 发表于 2013-12-16 16:55
p = (i++)+(i++)+(i++)
首先i++的后缀形式是指先计算然后再增加i的值,也就是说  p = (i++)+(i++)+(i++) ...

非常感谢 继续努力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 19:42:11 | 显示全部楼层
白铯。。囙忆 发表于 2013-12-16 19:35
非常感谢 继续努力

懂了就好,我怕我说的不够清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 20:18:04 | 显示全部楼层
正在写代码 发表于 2013-12-16 16:55
p = (i++)+(i++)+(i++)
首先i++的后缀形式是指先计算然后再增加i的值,也就是说  p = (i++)+(i++)+(i++) ...

我看了三遍 终于看明白了  非常感谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 20:21:12 | 显示全部楼层
星空左岸 发表于 2013-12-16 17:15
我昨天看书才看到这里,运算符++,--的优先级大于+

非常感谢  表格挺不错的  收藏啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 20:29:42 | 显示全部楼层
这个问题估计大家都很迷茫!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-12-17 11:40:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-18 07:31:48 | 显示全部楼层
suweixiao 发表于 2013-12-17 11:40
你这个i+++i+++i++就算不加括号,也会默认成加了括号的,因为如果不是这样,这个语句就是错误的。
i+++i++ ...

谢谢你的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-18 07:32:28 | 显示全部楼层
maomingkun 发表于 2013-12-16 20:29
这个问题估计大家都很迷茫!

是啊  刚开始学习  好多地方还没反应过来呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 20:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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