c语言指针问题 结果是7 10 3 9 请问结果怎么来的。

void fun(int a)
{
*a=
(a-1)+*(a+1);
(a-1)=*a-(a-1);
(a+1)=*a-(a-1);
}
int main()
{
int i=1,s=0,arr[5]={1,3,5,7,9};
fun(arr+2);
for(;i<5;i++)
printf("%d ",arr[i]);

函数指针乱用,结果应该是不确定的
fun函数中a的值为arr数组中5的内存地址,这时*(a+1)值为7,(a-1)是arr数组中3的地址
a=(a-1)+(a+1);执行后执行结果是将(a-1)+7这个地址赋值给arr第三个元素

这个确定代码没有写错嘛?放编译器里确定能过吗?
fun函数输入int型的参数,使用了指针的解引用,是非法的间接寻址,应该编译过不了的。