关于++ -- 运算符的迷茫?????
#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
不要迷茫了,这个连C语言标准都未做过全面的定义,各编译器不同,所以还是加括号比较好,这题没法说,和编译器有关,gcc和VC都有可能不同。看开发的人了 本帖最后由 正在写代码 于 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 16:37 static/image/common/back.gif
不要迷茫了,这个连C语言标准都未做过全面的定义,各编译器不同,所以还是加括号比较好,这题没法说,和编译 ...
非常感谢 正在写代码 发表于 2013-12-16 16:55 static/image/common/back.gif
p = (i++)+(i++)+(i++)
首先i++的后缀形式是指先计算然后再增加i的值,也就是说p = (i++)+(i++)+(i++) ...
非常感谢 继续努力 白铯。。囙忆 发表于 2013-12-16 19:35 static/image/common/back.gif
非常感谢 继续努力
懂了就好,我怕我说的不够清楚 正在写代码 发表于 2013-12-16 16:55 static/image/common/back.gif
p = (i++)+(i++)+(i++)
首先i++的后缀形式是指先计算然后再增加i的值,也就是说p = (i++)+(i++)+(i++) ...
我看了三遍 终于看明白了非常感谢啊
星空左岸 发表于 2013-12-16 17:15 static/image/common/back.gif
我昨天看书才看到这里,运算符++,--的优先级大于+
非常感谢表格挺不错的收藏啦 这个问题估计大家都很迷茫! suweixiao 发表于 2013-12-17 11:40 static/image/common/back.gif
你这个i+++i+++i++就算不加括号,也会默认成加了括号的,因为如果不是这样,这个语句就是错误的。
i+++i++ ...
谢谢你的解答 maomingkun 发表于 2013-12-16 20:29 static/image/common/back.gif
这个问题估计大家都很迷茫!
是啊刚开始学习好多地方还没反应过来呢
页:
[1]