【c语言】一维数组的倒序输出

#include <stdio.h>
int *inverse(int *p,int n);
void main(){
    int a[4]={1,2,3,4},*p,i;
    p=inverse(a,4);
    for(i=0;i<4;i++)
        printf("%d",*p);

}
int *inverse(int *p,int n){
    int temp[4],i;
    while(*p)++p;//找到p所指的最后一个元素
    for(i=0;i<n;i++,--p)
    temp[i]=*p;//将p的值赋给temp[i]
    p=temp; 
    return p;
}

不知道错哪里了,输出一串奇怪的数字???

while(*p)++p;//找到p所指的最后一个元素
这一步错了。

两个地方有问题

1

while(*p)++p;//找到p所指的最后一个元素 

这个语句p指向数组a, 但是你不能保证a数组后面的内存存的值为0
用while(*p)来判断是不合适的

2

p=temp; 
return p;

temp是局部变量, 只在inverse函数内有意义, 你将p指向temp数组后返回, 跳出inverse函数后的p指针指向的内存是不可确定的