好办法牢记前缀++(--)与后缀++(--)执行顺序

前缀++(--)和后缀++(--)引无数程序员竞折腰。虽然实际项目中由于程序员的自我修养,不会对++或--写出让人晦涩难懂的代码,但是在面试笔试的时候,一些“无聊的”企业总会拿这个来刁难我们。例如对于下面一个题目:

int a = 4; //分别执行以下五种情况

(1) a += a++; //a=?

(2) a += ++a; //a=?

(3) ++a += a; //a=?

(4) ++a += a++; //a=?

(5) ++a += ++a; //a=?

相信很多人对这个问题都会头大。没办法,兵来将挡,水来土掩,我们必须找个办法来应付此类题目。

大家都知道,a++表示先返回a的值,然后再对a执行+1操作,++a表示先对a执行+1操作,然后再返回a的值(此时a是加1后的值了)。这样单独容易理解。但是再加上+=等操作符,可能就不会那么明朗了(如上题中的(3)、(4)、(5)小问)。

一个很好的记忆方法:

(1)前缀++a(或--a)的优先级大于所有数值运算符

(2)后缀a++(或a--)的优先级小于所有数值运算符

牢记这个,就不会出错啦。例如对上面的例子:

(1) a += a++;

后缀++的优先级小于+=的优先级,因此先执行a+=a的操作,得8,然后再执行a++的操作,结果为9

(2) a += ++a;

前缀++的优先级大于+=的优先级,因此先执行++a的操作,得5,然后再执行a+=a的操作,结果为10

(3) ++a += a;

前缀++的优先级大于+=的优先级,因此先执行++a的操作,得5,然后再执行a+=a的操作,结果为10

(4) ++a += a++;

优先级:前缀++ > += > 后缀++,先执行++a得5,然后执行a+=a得10,最后执行a++得11

(5) ++a += ++a;

对于同时前缀的,顺序是从左往右,因此先执行左边的++a得5,然后执行右边的++a得6,最后执行a+=a得12


有人说不同编译器结果可能不一样,我在vs中结果如上。

0 条评论

    发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注