读书人

用指针实现选择法排序有关问题

发布时间: 2012-06-22 16:16:32 作者: rapoo

用指针实现选择法排序问题
从键盘输入8个数,用选择法按由大到小的顺序排列
为什么程序这样写能编译通过,但是执行时,输入参数后,提示出现“遇到问题需要关闭”

C/C++ code
# include<stdio.h>void main(){ int data[8],*p,*p2,*k,temp,i;     p=data;  for(i=0;i<8;i++)  { scanf("%d",p);    p++; }     for(p=data;p<data+8-1;p++)  { k=p;    for(p2=p+1;p2<data+8;p2++)       if(*p<*p2) k=p2;    if(k!=p)                    {temp=*p;        *p=*p2;        *p2=temp;}  }   for(i=0,p=data;i<8;i++,p++)      printf("%3d",*p);  }

问题出在哪里呢?

但是这样写就可以:
C/C++ code
# include<stdio.h># include<string.h>void main(){ int data[8],*p,*p2,temp,i;     p=data;  for(i=0;i<8;i++)  { scanf("%d",p);    p++; }     for(p=data;p<data+8-1;p++)  { for(p2=p+1;p2<data+8;p2++)      if(*p<*p2)         {temp=*p;         *p=*p2;         *p2=temp;}  }   for(i=0,p=data;i<8;i++,p++)      printf("%3d",*p);  printf("\n");  }


[解决办法]
C/C++ code
  for(p=data;p<data+8-1;p++)  { k=p;    for(p2=p+1;p2<data+8;p2++)//这个循环之后p2=data+8已经越界了,你后面还用了       if(*p<*p2) k=p2;    if(k!=p)      //此时和*p2交换会得到垃圾数据的,而且你的p2不一定是最大值             {temp=*p;        *p=*p2;        *p2=temp;}  }
[解决办法]
此楼是正解~
探讨

C/C++ code

for(p=data;p<data+8-1;p++)
{ k=p;
for(p2=p+1;p2<data+8;p2++)//这个循环之后p2=data+8已经越界了,你后面还用了
if(*p<*p2) k=p2;
if(k!=p) //此时和*p2交换会得到垃圾数据的,而且你的p2不一定是最大值
……

读书人网 >C语言

热点推荐