尝试使用指针在冒泡排序上编写程序时编译出错

时间:2017-06-09 16:15:36

标签: c sorting pointers

我试着在C中编写一个程序来“冒泡”一系列数字,这些数字是作为输入使用指针获得的。它如下:

#include<stdio.h>
void swap(int *p,int *q)
{
  int t;
  t=*p;
  *p=*q;
  *q=t;
}
void sort(int *a[],int n)
{
  int i,j;
  for(i=0;i<n-1;i++)
  {
    for(j=0;j<n-i-1;j++)
    {
      if(a[j]>a[j+1])
      swap(a[j],a[j+1]);
    }
  }
}      
int main()
{
  int p[40],b,i;
  printf("Enter the number of elements in the sequence: \n");
  scanf("%d",&b);
  printf("Enter the elements of the sequence: \n");
  for(i=0;i<b;i++)
  {
    scanf("%d",p[i]);
  }
  sort(p,b);
  printf("The sorted sequence is: \n");
  for(i=0;i<b;i++)
  {
    printf("%d \n",p[i]);
  }
  return 0;
}

但是,该程序没有编译。它显示以下错误消息:

enter image description here

错误消息显示:

error 139 - Argument no 1 of 'sort' must be of type '<ptr><ptr>int', not 'int[40]'

有人能告诉我如何更正我的程序以便编译并提供正确的输出吗?

ADDENDUM:以下是更正后的代码 -

#include<stdio.h>
void myswap(int *p,int *q)
{
  int t;
  t=*p;
  *p=*q;
  *q=t;
}
void sort(int a[],int n)
{
  int i,j;
  for(i=0;i<n-1;i++)
  {
    for(j=0;j<n-i-1;j++)
    {
      if(a[j]>a[j+1])
      myswap(&a[j],&a[j+1]);
    }
  }
}      
int main()
{
  int p[40],b,i;
  printf("Enter the number of elements in the sequence: \n");
  scanf("%d",&b);
  printf("Enter the elements of the sequence: \n");
  for(i=0;i<b;i++)
  {
    scanf("%d",&p[i]);
  }
  sort(p,b);
  printf("The sorted sequence is: \n");
  for(i=0;i<b;i++)
  {
    printf("%d \n",p[i]);
  }
  return 0;
}

1 个答案:

答案 0 :(得分:1)

简而言之,发现了两个错误:

void sort(int *a[],int n)

应该是

void sort(int a[],int n)

swap(a[j],a[j+1])

应该是

swap(&a[j],&a[j+1])

a[j]只是一个整数,您需要获取放置&的元素的地址,因为交换声明需要指针。