I recently found this
Code:
  order.c -- precedence in pointer operations */
 #include <stdio.h>
 int data[2] = {100, 200};
 int moredata[2] = {300, 400};
 int main(void)
 {
   int * p1, * p2, * p3;
 
   p1 = p2 = data;
   p3 = moredata;
   printf("  *p1 = %d,   *p2 = %d,	 *p3 = %d\n",
 		    *p1	 ,   *p2	 ,	 *p3);
   printf("*p1++ = %d, *++p2 = %d, (*p3)++ = %d\n",
 		  *p1++	, *++p2	 , (*p3)++);
   printf("  *p1 = %d,   *p2 = %d,	 *p3 = %d\n",
 		    *p1	 ,   *p2	 ,	 *p3);
   getchar();
   return 0;
 }
pointes already take some getting used to but then you throw these unary operators ++ and -- it just takes on even more confusion.
My primary is at
Code:
printf("*p1++ = %d, *++p2 = %d, (*p3)++ = %d\n",
 		  *p1++	, *++p2	 , (*p3)++);
this at first glance doesn't seem harmful but when you run it, you find out that the element and value the first and last expression point to have in fact been changed and you only figure that out when you reference that element and or value again. Is that kind of crazy??? when using these operators on pointers it seems you need to have a notepad handy to keep track of what your doing. again: I can only imagine the chaos that could come from this.
There you are happily manipulating the elements you've used those ++ and -- operators on only to reaslise they were the wrong ones all along. *shudder

the ouput:
Code:
  *p1 = 100,   *p2 = 100,	 *p3 = 300
 *p1++ = 100, *++p2 = 200, (*p3)++ = 300
   *p1 = 200,   *p2 = 200,	 *p3 = 301
scary..