++和--的運算優先順序比*高。
#include <stdio.h>#include <stdlib.h>void printa(int * a){ printf("a[]:"); int i; for(i=0;i<7;i++) printf("%d ",*(a+i)); printf("\n\n");}void seta(int *a){ int i; for(i=0;i<7;i++) a[i]=i+1;}int main(){ int a[]={1,2,3,4,5,6,7}; int *p; p=a; int r=*(p++);///先取值*p賦給r,然後p自增 。這裡是後自增 printf("*p1=%d,r=%d\n",*p,r);///2,=a[1] printa(a); seta(a); p=a; r=*p++;///自增優先順序高,先取值*p,然後p自增 printf("*p2=%d,r=%d\n",*p,r);///2,=a[1] printa(a); seta(a); p=a; (*p)++;///先取值a[0],然後a[0]自增1 printf("*p3=%d,%d\n",*p,a[1]);///2,=a[1] printa(a); seta(a); p=a; r=*++p;///p先自增,然後取值=a[1] printf("*p4=%d,%d\n",*p,r);/// printa(a); seta(a); p=a; ++(*p);///先取值得*p=a[0],然後a[0]自增1 printf("*p5=%d,p-a=%d\n",*p,p-a);///2,a[0] printa(a); seta(a); p=a; ++*p;///同上,因為*比++離p近? printf("*p6=%d,p-a=%d\n",*p,p-a);///2,a[0] printa(a); return 0;}
是挺無聊的,但是筆試就考。。。。。
附:c++運算子優先順序表,摘自<C++ Primer>