c++指针排序问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 20:36:08
我写的是一个先输入一个数据,然后通过指针来把输入的这些数从大到小排列起来,然后输出。 但是又一个错误:error c2106!!我翻来覆去都看不出到底为什么错了。 麻烦哪位高手帮忙解决下。感激不敬。程序如下:
#include <stdio.h>
main()
{
int i,n,a[10];
for (i=0;i<10;i++)
{scanf("%d",&n);
a[i]=n;
}
for(i=0;i<10;i++)
printf(" %d",a[i]);
printf("\n");
int *x,*y;
for(x=a;x<x+9;x++)
{ for (i=1;x+i<x+10;i++)
if (*x<*(x+i))
{y=x;
x=x+i;
x+i=y;
}
}
for(;x<x+10;x++)
printf(" %d",*x);
}
如果发现是哪个地方错了,麻烦指出下。如果是方法本来就错了,麻烦给个正确的方法。 对了,一定要用指针,不是其他方法(比如冒泡法。。这种我会的。)。谢谢。
我的意思本来就数希望排序嘛。从大到小的顺序,如果把for(;x<x+10;x++) 改为for(x=a;x<x+10;x++)那相当于没有排序了,输出就是原来的数组了,没有起到排序的作用了。
对于一楼兄弟的x+i<x+10不就是i<10?这个问题,的确,是我憨了。呵呵。
希望后面回答的兄弟看清楚我的题目,如果发现哪里错请先把修改后的代码放到c++里面运行了没错误了,达到排序的效果了再给兄弟我指出哈。谢谢。

#include <stdio.h>
#include <conio.h>
main()
{
int i,j,k,l,n,a[10];
for (i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(k=0;k<10;k++)
{
for (l=0;l<10;l++)
if (*(a+k)<*(a+l))
{
n=*(a+k);
*(a+k)=*(a+l);
*(a+l)=n;
}
}
for(j=0;j<10;j++)
printf(" %d",*(a+j));
getch();
}

你要的!

哪那么多的 *x,*y啊,你不晕,电脑也晕了!

你要明白一个道理:*a指的是一个值,而a指的是地址! 这点明白就好办多了。不明白的再好好想!我是在WinTC上调试的,机子破装不了VC!

1.*y=*x;
*x=*(x+i);
*(x+i)=*y;
2.for(x=a;x<x+9;x++) 已经使X指向了最后一个数组元素,当要输出时应该重新定义X值,即for(;x<x+10;x++) 改为for(x=a;x<x+10;x++).
另外x+i<x+10不就是i<10?为什么加个X,望指教。。

建议你在排完序后,加一个语句:
x = a;

十指跳舞的男人,强啊,不错,我顶。