| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 958 人关注过本帖
标题:[讨论]再请教一个指针问题
只看楼主 加入收藏
lyhorg
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-4-22
收藏
 问题点数:0 回复次数:18 
[讨论]再请教一个指针问题
#include "stdio.h"
#include "string.h"
void choicesort(char **p1,int num)
{char **p2,**temp,**temp2;
for(;p1<p1+num-1;p1++)
{ temp=p1;
for(p2=p1+1;p2<p1+num;p2++)
if(strcmp(*temp,*p2)>0)temp=p2;
**temp2=**p1;
**p1=**temp;
**temp=**temp2;
}
}
main(){int i;
char *list[]={"boy",
"girl",
"hacker",
"cracker","honker","xbox","blogger","vfp","qiaomu","pragrammer"};
choicesort(list,10);
for(i=0;i<10;i++)
printf("%s\n",list[i]);
getch();
}
//这是一个用指针数组和指向指针的指针的实现的对10个字符串排序,怎么在运行的时候没有结果呢?谢谢
搜索更多相关主题的帖子: 指针 
2006-05-03 19:52
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
....晕..**temp2=**p1?

字符串能这样给吗?

#include "stdio.h"
#include "string.h"
void choicesort(char **p1,int num)
{char **p2,**temp,**temp2;
for(;p1<p1+num-1;p1++)
{ temp=p1;
for(p2=p1+1;p2<p1+num;p2++)
if(strcmp(*temp,*p2)>0)
temp=p2;
strcpy(**temp2,**p1);
strcpy(**p1,**temp);
strcpy(**temp,**temp2);
}
}
main()
{int i;
char *list[]={"boy","girl","hacker","cracker","honker","xbox","blogger","vfp","qiaomu","pragrammer"};
choicesort(list,10);
for(i=0;i<10;i++)
printf("%s\n",list[i]);
getch();
}

你的程序还有很大简略的空间.自己改吧!

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-03 21:46
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
字符串不是这样定义的,楼主对这有本质上的误解.
应该这样: char *str;
另外,字符数组直接这样定义: char str_Array[]={"","","",...};
交换字符串的那段代码也错了,应该这样:
char *temp; //定义
.....
if(strcmp(str1,str2)>0)
{
temp=str1; //交换的是地址
str1=str2;
str2=temp;
}
希望楼主认真看书理解,努力!

我的原则很简单:不做不喜欢的事!
2006-05-03 21:54
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
楼上的说法是正确的

if(strcmp(*temp,*p2)>0)temp=p2;
**temp2=**p1;
**p1=**temp;
**temp=**temp2

严重错误

[此贴子已经被作者于2006-5-3 21:59:27编辑过]


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-03 21:58
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
都是不对的,用了指针最忌讳的指针悬挂!这么使用指针迷糊啊!
void choicesort(char **p,int num)
{
char *temp;
int i,j;
for(i=0;i<num;i++)
{
for(j=i+1;j<num;j++)
{
if(strcmp(*(p+i),*(p+j))>0)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
}
潭书上的!

用0-1统治世界!
2006-05-03 22:20
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用lj_860603在2006-5-3 21:54:00的发言:
字符串不是这样定义的,楼主对这有本质上的误解.
应该这样: char *str;
另外,字符数组直接这样定义: char str_Array[]={"","","",...};

字符可以这样定义的!书上说的我做也可以!都回去看书去!


用0-1统治世界!
2006-05-03 22:24
herotobe
Rank: 1
等 级:新手上路
威 望:1
帖 子:48
专家分:0
注 册:2006-5-3
收藏
得分:0 
temp2指向为空
在choicesort()函数中 char * 类型的指针变量temp2没有指向任何变量。

After all,tomorrow is another day!!!!
2006-05-03 22:38
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
以下是引用ninanwine在2006-5-3 22:20:00的发言:
都是不对的,用了指针最忌讳的指针悬挂!这么使用指针迷糊啊!
void choicesort(char **p,int num)
{
char *temp;
int i,j;
for(i=0;i<num;i++)
{
for(j=i+1;j<num;j++)
{
if(strcmp(*(p+i),*(p+j))>0)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
}
潭书
我那样说我可以告诉你肯定没错.另外,潭的书我不会去看,学校倒发了一本,我发现里面一些问题不规范.

我的原则很简单:不做不喜欢的事!
2006-05-04 00:13
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 

明明是两种定义格式都是允许的,为什么不对啊!我程序都执行了!


用0-1统治世界!
2006-05-04 00:34
lyhorg
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-4-22
收藏
得分:0 
指针悬挂问题怎么解决呢?
2006-05-05 12:29
快速回复:[讨论]再请教一个指针问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018521 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved