C语言中关于指针的问题。

main()
{ int i;
char **p,*pstr[5];
p=pstr;
for(i=0;i<5;i++)
scanf("%s",pstr);
p=pstr;
sort(p);
for(i=0;i<5;i++)
printf("%s\n",pstr);
}
sort(p)
char **p;
{
int i,j;
char *pchange;
for(i=0;i<5;i++)
{for(j=i-1;j<5;j++)
{if(strcmp(*(p+i),*(p+j)>0))
{pchange=*(p+j);
*(p+j)=*(p+j);
*(p+j)=pchange;
}
}
}
}
为什么输出的不是排好序的数字?

看了一下,有几个地方不对。
1,*pstr[5] 是一个指针数组,也就是数组里放的是指针,这些指针是没有指向具体的空间的。
2,fscan参数不对
3,strcmp写错有误
4,for循环j=i+1
5,交换算法不正确。

更正如下:

void sort(char **p);/*定义*/

int main()
{ int i;
char **p,*pstr[5];
p=pstr;

for(i=0;i<5;i++)
{
pstr[i]=(char *) malloc(100); /*申请内存*/
scanf("%s",pstr[i]); /*输入*/
}

sort(p);
for(i=0;i<5;i++)
printf("%s\n",pstr[i]); /*输出*/

return 0;
}

void sort(char **p)/**/
{

int i,j;
char *pchange;
for(i=0;i<5;i++)
{for(j=i+1;j<5;j++)
{if(strcmp(*(p+i),*(p+j))>0) /*比较*/
{pchange=*(p+j); /*交换*/
*(p+j)=*(p+i);
*(p+i)=pchange;
}
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-28
首先你是想排列数字还是字符串?如果是单纯的数字,那整个程序都不太对,根本用不到指向指针的指针。如果是字符串,你需要把字符串存储区提前定义好,否则根本没法放数据。你的程序错误的地方太多,改起来太麻烦了,建议看看字符串变量,字符数组,指针方面的知识,然后重写个吧。
第2个回答  2012-02-27
for(j=i-1;j<5;j++);有误。应写成:for(j=0;j<5-i;j++);
第3个回答  2012-02-28
有必要这么复杂,有简单的啊
相似回答
大家正在搜