关于指针用于排序的问题.(C语言)

来源:百度知道 编辑:UC知道 时间:2024/05/29 06:49:39
源程序:(选择排序法,由大到小)
#include "stdio.h"
void main()
{int a[10]={9,6,3,2,5,8,7,4,1,0},*p,*q,i,t;
p=q=a;
while(p+1)
{q=p+1;
while(q++)
{if(*p<*q){t=*p;*p=*q;*q=t;}
}
p++;
}
for(i=9;i>=0;i--)
printf("%3d",a[i]);
}

出错提示:
C:\WINDOWS\system32\cmd.exe NTVDM CPU 遇到无效指令.CS:5c08 ip:014c OP:ff ff 1c 08 0f选择"关闭"终止应用程序

麻烦说说错在哪里?改如何防治?

不适合用while循环,建议改为for循环,如此可令程序易读易懂。

#include "stdio.h"
void main()
{int a[10]={9,6,3,2,5,8,7,4,1,0},*p,*q,i,t,k;

for (i = 0; i<9; i++) {
p=a+i;
for (k=i+1; k<10; k++) {
q=a+k;
if(*p<*q){t=*p;*p=*q;*q=t;}
}
}

for(i=9;i>=0;i--)
printf("%3d",a[i]);

}

错在while(q++) while(p+1)
因为q,p 里存的都是地址是32位的2进制数字 所以是死循环 2个while中应该是数组a的下标有关的数字 我提示到这里 你自己改吧

/*while 里面好象不可以那么增加的,你看看下面的写法,也许对你有帮助*/

#include "stdio.h"
void main()
{int a[10]={9,6,3,2,5,8,7,4,1,0},*p,i=0,j,t;
p=a;
while(i<9)
{
j=i+1;
while(j<10)

{

if (*(p+i)>*(p+j)) /*比较后交换地址*/
{t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
j++;
}
i++;
}
for(i=9;i>=0;i--)
printf("%3d",a[i]);
}