大神求解~C语言*与++、操作的优先级有关问题

大神求解~~~C语言*与++、--操作的优先级问题
#include <stdio.h>
int main()
{
    int a[]={1,2,3,4,5};
    int *p=a;
    printf("%d, %d, %d, %d, %d, %d, %d\n", *p,  *(++p), (*p)++, *p, *p--, --(*p), *p);
    return 0;
}
PS:()的优先级最高,然后*和++、--的优先级相同,但是是从右往左结合的,还有printf函数的输出顺序是从右往左开始的,这些我都知道,但是输出结果和我算出来的还是不一样,而且在windows系统下的输出和Linux下的输出还不一样!真是见鬼了!!!有知道到底是怎么回事的大神吗?求讲解啊~~~

------解决思路----------------------
未定义行为,参见置顶:

http://bbs.****.net/topics/370153775
------解决思路----------------------
函数的实际参数,求值顺序没有规定
编译器爱怎么做就怎么做
C语言没有规定该按什么顺序
所以,在参数表中修改变量的值,是所谓的“未定义”行为,任何结果都有可能出现,所有的解释只是解释巧合现象,真正的程序员严禁编写这种代码