好办法牢记前缀++(--)与后缀++(--)执行顺序
前缀++(--)和后缀++(--)引无数程序员竞折腰。虽然实际项目中由于程序员的自我修养,不会对++或--写出让人晦涩难懂的代码,但是在面试笔试的时候,一些“无聊的”企业总会拿这个来刁难我们。例如对于下面一个题目:
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 条评论