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

main(){inti;char**p,*pstr[5];p=pstr;for(i=0;i<5;i++)scanf("%s",pstr);p=pstr;sort(p);f... 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;
}
}
}
}
为什么输出的不是排好序的数字?
展开
 我来答
百度网友6aca13d
2012-03-02
知道答主
回答量:26
采纳率:0%
帮助的人:20.5万
展开全部
首先 字符指针数组中的元素没有赋地址值是不能输入字符串的
可以这样解决
char p[5][20],*pstr[5];
for(i=0;i<5;i++)
{
pstr[i]=p[i];
scanf("%s",pstr[i]);
}
主函数中 for(i=0;i<5;i++)
scanf("%s",pstr);
循环输入时语法错误 scanf中应该是pstr[i];
整理函数sort()中也有错误
sort(char *p[5])参数应该是字符指针数组不能用二维数组做参数
因为二维数组的作参数不能改变其固有的地址,也无法进行字符串的排序,所以只能用字符指针数组作为参数进行排序。
你的sort()函数有很多算法错误
应该是
for(i=0;i<5;i++)
{for(j=i;j<5;j++)
{if(strcmp(*(p+i),*p(p+i))>0)
{ pchange=*(p+i)
*(p+i)=*(p+j);
*(p+j)=pchange;
}
整体修改后的函数应该是这个样子
#include "stdio.h"
#include "string.h"
void sort(char *p[5]);
void main()
{ int i;
char p[5][20],*pstr[5];
for(i=0;i<5;i++)
{
pstr[i]=p[i];
scanf("%s",pstr[i]);
}
for(i=0;i<5;i++)
printf("%s,%p,%p\n",pstr[i],pstr[i],p[i]);
sort(pstr);
for(i=0;i<5;i++)
printf("%s,%p,%p\n",p[i],pstr[i],p[i]);
}
void sort(char *p[5])
{
int i,j;
char *pchange;
for(i=0;i<5;i++)
{for(j=i;j<5;j++)
{if(strcmp(p[i],p[j])>0)
{
pchange=p[i];
p[i]=p[j];
p[j]=pchange;
}
}
}
}
希望能对你有所帮助~~
淦海瑶s1
2012-02-28 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:792万
展开全部
#include <string.h>
#include <stdio.h>
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)
{
strcpy(pchange,*(p+i));
strcpy(*(p+i),*(p+j));
strpy(*(p+j),pchange);
}
}
main()
{
int i;
char **p,*pstr[5];
p=pstr;
for(i=0;i<5;i++)
gets(pstr[i]);
p=pstr;
sort(p);
for(i=0;i<5;i++)
puts(pstr[i]);
}
我没有运行,估计差不多,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangdebo321
2012-02-27 · TA获得超过203个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:200万
展开全部
初步错误是你的p指针没有申请空间,所以内存中是散乱的,p+i也就失去了意义,建议用malloc申请一片连续的空间,或者直接用二维数组代替
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
烟雨柳桥
2012-02-28
知道答主
回答量:14
采纳率:0%
帮助的人:7.6万
展开全部
*(p+j)=*(p+j);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式