偶然间想测试一下++ 的前置与后置问题。 也算是在找工作前做好复习。
前置加, 是指在当前行程序执行之前, 将其执行后,再执行本行其他的操作。
后置加, 是指在当前行程序执行完后, 再执行后置加。
【1】运算符“++”和“--”与其他运算符的不同点在于,他们既可以用于前缀运算(++ count, -- count), 也可以用于后缀 运算(count++, count--)。
这两种情况,其效果都是使得变量count 增加1 或者减少 1 。 但其意义有很大的不同。
表达式++ count, 表示先将count 的值自增1 , 然后再取自增后的结果值使用。
表达式count++, 则表示先取count 的值使用,然后count 的值再自增1 。
这意味着++ count 和 count++ 虽然对count 的操作结果相同,但是在使用count 的值这点上不一样。下面通过例 子来说明,更为直观。
比如:
int count = 5;
i = count++; // 操作:先将count 的值5 取出赋值给i ,然后count 再自增。
执行结果为: i = 5, count = 6
int count = 5;
i = ++ count; // 操作:先将count 的值自增1, 变成6, 然后取当前值9 赋值给i
执行结果为: i = 6, count = 6
注意:当遇到i+++j 这样的表达式时, 如何来区分他所表达的意思呢?究竟i 先后缀自增1 以后再与j 相加,还是j 先前缀自增1后再与i 相加呢? 编译器在处理他们的时候使用了一种叫做“贪心法”的算法——它总是从左 向右取尽可能多的有意义的字符。这样的话,取道i++ 就可以了, 他是有意义的,而i+ ++j 就没有意义 了。所以i+++j 等价于(i++) + j
。
自增和自减运算符只能用于作用于变量,不能作用于表达式。像(i+j)++ 这样的表达式是非法地。 i++ + ++j 同样非法,按照“贪心法”来理解,他所表达的意思应该是( (i++) ++) + j, 而i++ 自然是一个算术表达 式,那么(i++)++ 的最后一个++ 就是作用在表达式上的了, 当然是非法的。
下面就是一些举例,来进一步说明++ 在程序中的使用。
/* 测试1 - 1 */
#include <stdio.h>
int main()
{
int n = 5;
while(n--) // 先判断, 再减
{
printf("%d\n", n);
}
return 0;
}

说明:在测试1-1中,在while 语句中个, 先将n 的值进行判断是否等于0, 然后再进行自减操作。
故而, 第一个输出的值是 4.
/* 测试2 - 1 */
#include <stdio.h>
int main()
{
int a;
a = 5;
// (a++) += a; // 报错
// (++a) += a; // 报错
printf("*****************\n");
a += (a++);
printf("a = %d\n", a);
printf("*****************\n");
a = 5;
a += (++a);
printf("a = %d\n", a);
printf("*****************");
return 0;
}

引用:
【1】《C 语言程序设计(C99版)》作者:陈良银,游红越,李旭伟