白铯。。囙忆 发表于 2013-12-16 16:23:20

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

#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

拈花小仙 发表于 2013-12-16 16:37:02

不要迷茫了,这个连C语言标准都未做过全面的定义,各编译器不同,所以还是加括号比较好,这题没法说,和编译器有关,gcc和VC都有可能不同。看开发的人了

正在写代码 发表于 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。

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

星空左岸 发表于 2013-12-16 17:15:41

我昨天看书才看到这里,运算符++,--的优先级大于+

白铯。。囙忆 发表于 2013-12-16 19:34:42

拈花小仙 发表于 2013-12-16 16:37 static/image/common/back.gif
不要迷茫了,这个连C语言标准都未做过全面的定义,各编译器不同,所以还是加括号比较好,这题没法说,和编译 ...

非常感谢

白铯。。囙忆 发表于 2013-12-16 19:35:25

正在写代码 发表于 2013-12-16 16:55 static/image/common/back.gif
p = (i++)+(i++)+(i++)
首先i++的后缀形式是指先计算然后再增加i的值,也就是说p = (i++)+(i++)+(i++) ...

非常感谢 继续努力

正在写代码 发表于 2013-12-16 19:42:11

白铯。。囙忆 发表于 2013-12-16 19:35 static/image/common/back.gif
非常感谢 继续努力

懂了就好,我怕我说的不够清楚

白铯。。囙忆 发表于 2013-12-16 20:18:04

正在写代码 发表于 2013-12-16 16:55 static/image/common/back.gif
p = (i++)+(i++)+(i++)
首先i++的后缀形式是指先计算然后再增加i的值,也就是说p = (i++)+(i++)+(i++) ...

我看了三遍 终于看明白了非常感谢啊

白铯。。囙忆 发表于 2013-12-16 20:21:12

星空左岸 发表于 2013-12-16 17:15 static/image/common/back.gif
我昨天看书才看到这里,运算符++,--的优先级大于+

非常感谢表格挺不错的收藏啦

maomingkun 发表于 2013-12-16 20:29:42

这个问题估计大家都很迷茫!

suweixiao 发表于 2013-12-17 11:40:48

白铯。。囙忆 发表于 2013-12-18 07:31:48

suweixiao 发表于 2013-12-17 11:40 static/image/common/back.gif
你这个i+++i+++i++就算不加括号,也会默认成加了括号的,因为如果不是这样,这个语句就是错误的。
i+++i++ ...

谢谢你的解答

白铯。。囙忆 发表于 2013-12-18 07:32:28

maomingkun 发表于 2013-12-16 20:29 static/image/common/back.gif
这个问题估计大家都很迷茫!

是啊刚开始学习好多地方还没反应过来呢
页: [1]
查看完整版本: 关于++ -- 运算符的迷茫?????