C语言用指针给字符串排序,错在哪?

#include
#include
void main()
{
void max(char *x,char *y,char *z);
char a[50],b[50],c[50],d,*p,*q,*m;
printf("请输入三个字符串\n");
gets(a);
gets(b);
gets(c);
p=a;
q=b;
m=c;
printf("排序如下;\n");
max(p,q,m);
puts(p);puts(q);puts(m);
}
void max(char *x,char *y,char *z)
{
char *t;
if(strcmp(x,y)<0)
{
t=x;
x=y;
y=t;
}
if(strcmp(x,z)<0)
{
t=x;
x=z;
z=t;
}
if(strcmp(y,z)<0)
{
t=y;
y=z;
z=t;
}
}

void max(char *x,char *y,char *z)
这么写形参不会作用到实参。
你要这么写,必须用strcpy(t, x);
strcpy(x, y);
strcpy(y, t);
等。(要保证数组有足够空间)
也可以用二维数组。

strcmp(x,y)
这是在比较什么呢?这里的x和y按照你的说法,应该是指向两个字符串的地址,它们的比较什么意义呢