当前位置: 代码迷 >> C语言 >> 帮忙看一下这道指针的简单习题!
  详细解决方案

帮忙看一下这道指针的简单习题!

热度:144   发布时间:2007-03-05 10:23:48.0
帮忙看一下这道指针的简单习题!
/*输入3个整数,按由小到大的顺序输出*/
#include<stdio.h>
void main()
{void chang(int,int,int);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
chang(a,b,c);
}
void chang(int x,int y,int z)
{int *p,k;
if(x>y){k=x;x=y;y=k;}
if(y>z){k=y;y=z;z=k;}
if(x>z){k=x;x=z;z=k;}
p=&x;
for(;p<&x+3;p++)
printf("%d ",*p);
printf("\n");
}
这个编译没有问题,但结果有问题!帮忙看一下那里有毛病?
搜索更多相关的解决方案: 习题  指针  

----------------解决方案--------------------------------------------------------
p++后,指针不知道指到哪去了,当然显示的不是排序后2个的数值
----------------解决方案--------------------------------------------------------

#include<stdio.h>
void main()
{void chang(int,int,int);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
chang(a,b,c);
}
void chang(int x,int y,int z)
{int *p,k,i;
if(x>y){k=x;x=y;y=k;}
if(y>z){k=y;y=z;z=k;}
if(x>z){k=x;x=z;z=k;}
p=&x;
for(i=0;i<3;i++)
printf("%d ",*(p+i));
printf("\n");
}
改成这样结果还是不对阿!!跟没有排序一样!


----------------解决方案--------------------------------------------------------
printf("%d %d %d",x,y,z);
----------------解决方案--------------------------------------------------------

你的那些用法是对数组的用法


----------------解决方案--------------------------------------------------------
影响结果的并不是

for(i=0;i<3;i++)
printf("%d ",*(p+i)); \\改为p++或printf("%d %d %d",x,y,z);都可以


影响结果的真正原因在:
if(x>y){k=x;x=y;y=k;}
if(y>z){k=y;y=z;z=k;}
if(x>z){k=x;x=z;z=k;}
这样并不能真正实现排序!

可以用一些方法进行测试!(例如"黑盒法")

对于大于2个的数排序建议用一些常用的排序方法(如冒泡,选择,插入,堆排序,快速排序……)

----------------解决方案--------------------------------------------------------

天啊!又发现自己一个对指针的错误认识!辛苦大家了


----------------解决方案--------------------------------------------------------
  相关解决方案