(个人总结,如有不对的地方,望指正)
引入
1、单目运算符包括:++,--,(类型),sizeof,&,*,^,!,+(正号),-(负号)。结合规律是:从右到左
当然,方向性是对于相同优先级的运算中了。
2、函数参数中表达式的运算顺序是从右向左。在普通的只有双目运算的表达式中的运算是从左向右的。
printf也是一个函数。特别的是,a=16;printf(“%d,%d,%d\n”,a++,a++,++a);在vc6.0环境下,a++是在整个语句运行后才加一;在Borlandc++ 5.0、Turbo C 2.0环境下,a++是在这个表达式运行完就加一。需要注意的是函数参数间的逗号不要把他们看成逗号表达式了,如果是逗号表达式还要在函数中加括号。
所以:
1、*p++等同于*(p++),先运行p++,但p++却谦逊的礼让了(它是有优先权,但声明它要后加)。然后运行*p(因为指针还没向下移动。最终的结束时*p,p++;
官方一点的解释是:取出p所在单元的值作为表达式的值,在将指针p移动到下一个存储单元。
2、++*p等同于++(*p),取出p所在单元的值,然后该值加一作为表达式的值。
演示:
#include "stdio.h"
void main()
{
inta[2]={2,12},b[2]={2,12};
int*p=a,*q=b;
printf(",*p++=%d,++*p=%d,*p++=%d\n",(*p)++,++*p,*p++);
*q++,++*q,(*q)++;
printf("%d\n",b[1]);
}