用这段代码来给你说明吧
    int a[6]={1,2,3,4,5,6};
    int *k=a;
    int x = *(k++);
    printf("%d",x,);
反汇编 
    int x = *(k++);
00811698
  mov
         eax,dword ptr [ebp-2Ch]
  
0081169B
  mov
         ecx,dword ptr [eax]
  
0081169D
  mov
         dword ptr [ebp-38h],ecx
    // 先把*k的值赋值给x(也就是ptr [ebp-38h]) 
008116A0
  mov
         edx,dword ptr [ebp-2Ch]
  
008116A3
  add
         edx,4
                      // k++
008116A6
  mov
         dword ptr [ebp-2Ch],edx
  
    printf("%d",x);
008116A9
  mov
         esi,esp
  
008116AB
  mov
         eax,dword ptr [ebp-38h]
   输出x(ptr [ebp-38h])
008116AE
  push
        eax
  
可以看到 ,int x = *(k++); 被编译器处理成了 x = *k;k++;
这个是vs2010反汇编的结果,
优先级++高于*,并不是说
  *(k++)就先执行++ 后执行*。
而是说++ 这个运算符 归属k ,还是归属(*k)
如果++归属k,那么就是k指针指向下一个k的地址 ,也就是k=k+1,等价于k = &a【1】
如果++归属(*k),那么就是k的指向内容递增1 ,也就是 *(k) = *(k)+1 ,等价于a【0】 = a【0】+1;
[
 本帖最后由 yuccn 于 2013-12-24 09:23 编辑 ]