*(pCur++)=LUT[*(pCur)]和*(pCur++)=LUT[*pCur]有什么区别,该如何解决

*(pCur++)=LUT[*(pCur)]和*(pCur++)=LUT[*pCur]有什么区别
写程序的时候遇到了问题,刚开始的时候是*(pCur++)=LUT[*pCur]; 也就是没有括号的结果运行的和想象的不一样,后来加了括号: *(pCur++)=LUT[*(pCur)]; 这样就正常了,搞不懂这两个又什么区别?

完整的函数代码是:
C/C++ code
BYTE* white_black_image(BYTE *pImg,int width,int height)
{
   BYTE *pEnd,*pCur;
   int i;
   BYTE LUT[256];
   system("cls");/*清屏*/
   pEnd=pImg+width*height;
   for (i=0;i<128;i++)
     LUT[i]=0;
   for (;i<256;i++)
     LUT[i]=255;
   for (pCur=pImg;pCur<=pEnd;)
     *(pCur++)=LUT[*(pCur)];
   return pImg;
}



------解决方案--------------------
http://topic.****.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?15041
这是月月问,天天问,时时问的老问题啦,国产的垃圾教材一天不消失,这些问题就肯定一直被问啊。
------解决方案--------------------
这个纯属编译器的具体实现问题,简单说就是你等号左侧的pCur++的副作用什么时候产生的问题。你所使用的编译器在遇到某些特殊情况的时候也会强制将之前延后的副作用产生,所以造成两者结果不同,这个东西c语言标准没有定义,它只定义了遇到顺序点要强制产生负作用(截止),但是如果没有遇到的话什么时候产生完全由编译器实现决定,结果,被你碰到了。所以如果你换一个编译器,结果就会不一样了,你可以试一下别的编译器,吃一堑长一智。
PS:我使用gcc 4.6.2,一切正常,两个都可以通过。不相信,你试下……