为什么void reserve(char *p1)下面却reserve(p1)

for(i=0;i<(int)(len/2);i++)
{
    char l=*(p1+i);
    *(p1+i)=*(p1+len-1-i);
    *(p+len-1-i)=l;

}

#include
#include
void reserve(char p1)
{
int i;
int len =strlen(p1);
for(i=0;i<(int)(len/2);i++)
{
char l=
(p1+i);
(p1+i)=(p1+len-1-i);
*(p1+len-1-i)=l;

}

}
int main()
{
char p[1000];
char * p1;
p1=&p;
int len,i,j,l;
scanf("%s",p);
len=strlen(p);

/*

for(i=0;i<(int)(len/2);i++)
{
char l=*(p1+i);
(p1+i)=(p1+len-1-i);
*(p1+len-1-i)=l;

}*/
reserve(p1);
printf("%s",p);
return 0;

}

好像错了??

因为P1定义的时候就是指针呀,所以函数参数要求是指针没毛病