调用函数 // "]"令牌之前的预期主表达式

Calling function // expected primary-expression before "]" token

本文关键字:表达式 函数 令牌 调用      更新时间:2023-10-16
`#include <iostream>
 using namespace std;
 #define N 10
 void QuickSort(int arr[],int left,int right)
{
int i = left, j = right;
int buffer;
int middle = arr[(left+right)/2];
//partition
while(i<=j)
{
    while(arr[i]<middle)
        i++;
    while(arr[j]>middle)
        j--;
    if(i<=j)
    {
        buffer = arr[i];
        arr[i] = arr[j];
        arr[j] = buffer;
        i++;
        j--;
    }
}
//recursion
 if (left < j)
    QuickSort(arr, left, j);
 if (i < right)
    QuickSort(arr, i, right);
}
int main()
{
  int A[N] = {10,9,8,7,6,5,4,3,2,1};
  QuickSort(A[],A,A+N);     //ERROR
  return 0;
}`

好了,伙计们,这是我的问题。我真的不知道如何调用函数来对标准的非动态数组进行排序。当我尝试使用QuickSort(A[],A,A+N)调用QuickSort(int A[],int左,int右)时,会出现"期望的主表达式之前"的错误。提前感谢您的反馈

就像这样传递a。另外,您的第二个和第三个参数都是int值,因此虽然我不会深入研究代码的逻辑,但您应该选择一个整数来为您的数组排序提供边界。现在传入的是数组中第一个元素的int *,然后第三个参数是值+ n !

#include <iostream>
 using namespace std;
 #define N 10
 void QuickSort(int arr[],int left,int right)
{
int i = left, j = right;
int buffer;
int middle = arr[(left+right)/2];
//partition
while(i<=j)
{
    while(arr[i]<middle)
        i++;
    while(arr[j]>middle)
        j--;
    if(i<=j)
    {
        buffer = arr[i];
        arr[i] = arr[j];
        arr[j] = buffer;
        i++;
        j--;
    }
}
//recursion
 if (left < j)
    QuickSort(arr, left, j);
 if (i < right)
    QuickSort(arr, i, right);
}
int main()
{
  int A[N] = {10,9,8,7,6,5,4,3,2,1};
  QuickSort(A,0,N);     //DO THIS
  return 0;
}

两件事:

  1. 单独通过A
  2. leftright是数组索引,不是指针。

试一试:

int A[N] = {10,9,8,7,6,5,4,3,2,1};
QuickSort(A, 0, N - 1); // array length N means the last element is index N-1.

在将数组传递给函数时不应该使用大括号,似乎你的代码应该是:

QuickSort(A,0,0+N);