很诡异的C++代码.解决思路

很诡异的C++代码..
int main()
{
int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
++ptr;
cout << *ptr << endl;
cout << *ptr << '\n'
 << *(++ptr) << endl;
return 0;
}
输出结果是 7, 8, 8;

int main()
{
int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
++ptr;
cout << *ptr << endl;
cout << *ptr << '\n';
cout << *(++ptr) << endl;
return 0;
}
输出结果是 7, 7, 8

这是什么情况???
------解决方案--------------------
其实读取顺序是从右向左的,输出结果是从左向右而已
------解决方案--------------------
cout << a << b << c << d;
是先d后c后b后a