1.自增++和自减--具有很高的优先级,只有圆括号( )比它们的优先级高,如
x*y++;
x*(y++); //二者等价
我们应这样理解:自增减运算符只能影响“变量”,而x*y本身不是一个变量(而是一个计算结果),因此不可能是
(x*y)++; //编译器会报错
2.关于表达式中的自增减什么时候进行,以++为例
n++; //先使用n,然后再将它增加
++n; //先将n值增加,然后再使用它
3.如何避免自增减带来的混乱
当变量多次出现在表达式或函数参数中时,避免使用自增减
4.n++, n--本身的后增/减属性高于运算符优先级,如
int a[] = {10, 20, 30, 40, 50};
int * p1 = a, * p2 = a;
printf("%d, %d\n", *++p1, *p2++); //打印输出10, 20
一元运算符一般自右向左结合,因此上例中应是”先指针移动,再取值“;但对于*p2++,仍要在取值完毕后再使p2自增,即使用*(p2++)的结果也是一样