近期在看谭浩强先生的c程序设计,看到有关自增自减的地方,感觉需要做个记录。
个人观点:对于i++可以解释为三条语句:
tmp = i;
i = i+1;
return tmp;
这里返回的是tmp这个变量,所以说i++在表达式里面可以看成i,因为他们两个的值相等,只不过后面i自增了1。
所以对于表达式 j = i++ + i++ + i++;可以表示为两条语句: j = i + i + i; i = i +3;//因为有三个i++
这样解释的原因是在c语言里(++)后增运算符的优先级是高于(+)的。
对于++i来说可以理解成一下两条语句:
i = i + 1;
return i;
注意,这里返回的是i这个变量,所以++i是先自增一然后再去执行其他的操作,所以对于++i可以看成(i+1)。
对于表达式 j = ++i + ++i + ++i;可以解释为:j = (i+1) + (i +1) + (i + 1); i = i + 3;
同样是因为(++)先增运算符的优先级高于(+).
对于先减和后减运算符也是一样的,同样可以这样来理解。
最后要注意的就是,不同的编译器对于表达式的左结合还是右结合的运算顺序是不同。对于像
printf("%d %d", i, i++);这样的语句还是应该引起注意的。为了好的一致性,并不推荐这样来写。