#include<iostream>
using namespace std;
*和++组合有一下几种情况
//1.++*p 2.*++p 3.++(*p) 4.*(++p)
//5.*p++ 6.(*p)++ 7.*(p++)
int main() {
int arr[] = { 5,3,8,2,7,2,6,3,9,0 },*p;
p = arr;
//1.++*p
cout<< ++*p<<" "<<*p<<endl;//6 6 前自增再表达式前操作
//先*p 再++ p未发生偏移,但数组的arr[0]变为6了
//此时arr[]={6,3,8,2,7,2,6,3,9,0}; p->arr[0]
//2.*++p
cout << *++p << " " << *p << endl;//3 3
//先++ 后* p指向改变 当前未改变数组数据
//此时arr[]={6,3,8,2,7,2,6,3,9,0}; p->arr[1]
//3.++(*p)同1.++*p
cout << ++(*p) << " " << *p << endl;//4 4
//此时arr[]={6,4,8,2,7,2,6,3,9,0}; p->arr[1]
//4.*(++p)
cout << *(++p) << " " << *p << endl;//8 8
//先++ 后* p指向改变 当前未改变数组数据
//此时arr[]={6,4,8,2,7,2,6,3,9,0}; p->arr[2]
//5.*p++
cout << *p++ << " " << *p << endl;//8 2
//先*p 后++ p指向改变 当前未改变数组数据
//先* 表达式 *p++ 结束后再++ 意思当输出*p++时会先输出*p再++ 后面再输出*p时就是++后的值
//此时arr[]={6,4,8,2,7,2,6,3,9,0}; p->arr[3]
//6.(*p)++ 表示将解引用后的值++ 注意与5.*p++的区别
cout << (*p)++ << " " << *p << endl;//2 3
//由于++是在表达式结束后在操作,所以输出(*p)++时,还是会先输出*p,在后面输出*p时就是++后的值
//此时arr[]={6,3,8,3,7,2,6,3,9,0}; p->arr[3]
//7.*(p++)等同于*p++ 先* 再++ 在*(p++)表达式中,虽然()的优先级比*更高,
//由于(p++)是一个后置递增运算符,所以也是在表达式*(p++)先*p结束后再++ 后置递增递增一定是在表达式结束后再操作 与前置递增相反
cout << *(p++) << " " << *p << endl;//3 7
//此时arr[]={6,3,8,3,7,2,6,3,9,0}; p->arr[4]
//总结:注意的点
//1.++(*p)同1.++*p,++都是对值操作,而*p++中++是对指针的操作,(*p)++中++是对值进行操作
//2.输出后置递增++时,注意++操作是在表达式结束后,如第5、6、7点
system("pause");
return 0;
}