I have seen a code like this:

Code:

#include <stdio.h>
int data[2]={100,300};
int moredata[2]={200,400};
int main(void)
{
int *p1,*p2,*p3;
p1=p2=data;
p3=moredata;
printf("*p1++=%d, *++p2=%d, (*p3)++=%d\n",*p1++,*++p2,(*p3)++);
return 0;
}

and what I get is *p1++==100, *++p2=300, (*p3)++=200

from what I know, ++(postfix) has higher precedence than *, why I do not get *p1++=300? and the associativity of ++(postfix) is left to right, for * is right to left, so how can I determine the associativity here? does (*p3)++ mean adding 1 to the value p3 is pointing to? why i did not get (*p3)++=201?

thanks for help!