i++和++i的区别

来源:互联网 发布:淘宝团队管理怎么设置 编辑:程序博客网 时间:2024/05/21 21:42

文章的楼主连左值都可以运算,还若无其事得当作可以编译,在那讲解,若无其事就算了,可以当做没有发现编译问题,但是那讲解也太误导人了吧?然后我跟帖的楼下还出现一个“石破天”,以教导式的口吻,在那讲解,不知道的人岂不是就信了吗?真真一群害人之马,当然我只是指其中几位,很多跟帖的朋友,我自认还是不如的。

就为了这个影响广泛的害人帖子(在csdn上弹框出来,影响能不小吗?),我也来探讨一下i++,我是菜鸟,我不会用教导式口吻来讲解。

首先说文章楼主提到的

<div bg_java"="" style="color: rgb(51, 51, 51); font-family: verdana, sans-serif; font-size: 13px; width: 685px; line-height: 25px;">
if((i++=j++)!=4){}  

看到这句代码我真想喷,因为这让我对自己产生了不自信,还去编译了一下,果然是错误的,左边怎么能够进行运算呢?楼主真强大...为什么昨天没有写文章,没有情绪激动,因

为我知道C++风格也是这样赋值,不知道能不能编译过去,但是今天看到跟帖的朋友说,VC98过不去,DEV-C++也过不去,我才感到真有一种被耍的感觉。“左值能运算吗?What  the hell!"这一句,只是骂我自己怀疑自己,没有对其他任何人。

假设,楼主是手误,咱们来一个正确的能编译的代码讨论一下:

temp = j;//先赋
j = j + 1;//后加
i = temp;

 

再来一个i = ++j:这一句应该被拆分为:

/* 这个是原式,尊重版权,但是误导人*/
int i=10;
i=i++ + i++;//20  --这里应该会是21,note by jacob
i=++i + ++i;//44  --这里应该会是45,note by jacob
 

 

首先咱们把这都拆开来理解:

/*第二个 i = ++i + ++i;*/
i = i + 1;
temp1 = i;
i = i + 1;
temp2 = i;
i = temp1 +temp2;


这样的例子,应该算是比较复杂的吧?如果需要,还可以来一个更加复杂的,不过不再详细解释,大家可以拿来推敲一下:

<div bg_java"="" style="color: rgb(51, 51, 51); font-family: verdana, sans-serif; font-size: 13px; width: 685px; line-height: 25px;">
int j =0,k = 0,h=0;
k = k++ + k++ + k++ + ++k;//k == 7
j = ++j + j++ + j++ + j++;//j ==7;
h = ++h + ++h;

0 0