一个数组使用指针的方法从大到小排序


#include<stdio.h>
int main()
{
    void paixu(int x[ ],int n);
    int arr[10],i,*p;
    p=arr;
    printf("请输入10个数\n");
    for(i=0;i<10;i++)
        scanf("%d",p++);
    paixu(p,10);
    for(p=arr,i=0;i<10;i++)
    {
        printf("%d",*p);
        p++;
    }
    printf("\n");
    return 0;
}
void paixu(int x[ ],int n)
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
        {
            k=i;
            for(j=i+1;j<n;j++)
                if(x[j]>x[k])k=j;
                    if(k!=i)
                    {
                        t=x[i];
                        x[i]=x[k];
                        x[k]=t;
                    }
        }
}

paixu(p,10);这一句前面加上一句:p = arr;//把指针重新移动到数组头

你在调用paixu函数之前应该把p重新置为数组(因为你在获取输入时已经让p等于数组末尾之后的地址了)


int main()
{
   void paixu(int x[], int n);
   int arr[10], i, *p;
   p = arr;
   printf("请输入10个数\n");
   for (i = 0; i < 10; i++)
      scanf("%d", p++);
   p = arr;
   paixu(p, 10);
   for (p = arr, i = 0; i < 10; i++)
   {
      printf("%d", *p);
      p++;
   }
   printf("\n");
   return 0;
}