C程序,请帮我看一下这个用指针数组对5个字符串排序的程序,我有一个地方不明白,请看补充:

来源:百度知道 编辑:UC知道 时间:2024/06/14 01:04:52
在主函数输入5个不等长的字符串,用另一个函数用冒泡对它们升序,然后输出结果正确,请帮我看一下在sort函数里,指针temp为什么不要指向一个字符数组,请看我的注释,谢谢!
#include <stdio.h>
#include <string.h>
void sort(char *s[]);
void main()
{int i;
char *p[5],str[5][20];
for(i=0;i<5;i++)
p[i]=str[i];
printf("input 5 strings:");
for(i=0;i<5;i++)
scanf("%s",p[i]);
sort(p);
printf("Now the sequence is:\n");
for(i=0;i<5;i++)
printf("%s\n",p[i]);
getch();
}
void sort(char *s[])
{int i,j;
char *temp;/*我想问的在这里:char t[20],*temp=t;这一行我写成这样,程序结果也对,可答案不是写成这样,它直接用了一个没有指向的指针,为什么啦,我这样写是不是对的?*/
for(i=0;i<5;i++)
for(j=0;j<5-i;j++)
if(strcmp(*(s+j),*(s+j+1))>0)
{temp=*(s+j);
*(s+j)=*(s+j+1);
*(s+j+1)=temp;}
}

这两种写法都不能算错,只是char t[20],*temp=t;相当于给temp一个初始值t,或者说是t[0]的地址。但是在后面第一次执行temp=*(s+j);的时候,temp就被重新赋值了。就是说你的声明方法只是白白多占用了20个字节的内存。