*p++与*++p;(*p)++ 与 ++(*p)的理解

1 优先级

后置++和--大于前置++和--
*比这都小
结合都是右结合

1.1 左右结合

就是好几个同一优先级的,等于右边的加个括号

2 例子

2.1 *p++

=是右结合
a=b=c
相当于
a=(b=c)
int a[3]={1,2,3};
int *p=a;
cout<<*p++<<endl;//结果为1
cout<<*p<<endl;//结果为2

*p++相当于*(p++),但是由于后置++将自增前的原始副本作为右值返回,因此*p++还是对自增前的p解引用
注意:后置++也就不可以作为左值了,a++=b,是错的

2.2 *++p

由于右结合,*++p相当于*(++p),且前置++返回的是对象本身,这里也就是自增过后的本身
注意:前置++可以作为左值,++a=b,是对的

2.3 (*p)++和++(*p)一样的

就是先解引用再自增

2.4 ++*p

由于前置++和*优先级一样,且是右结合,所以相当于++(*p)