【问题标题】:Calling function // expected primary-expression before "]" token [closed]调用函数//“]”标记之前的预期主表达式[关闭]
【发布时间】:2013-03-21 21:48:06
【问题描述】:
`#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 left, int right) 时,会出现一个错误,提示“在“]”令牌之前预期的主表达式“发生。 提前感谢您的反馈。

【问题讨论】:

  • 不,这对 SO 来说不是一个好问题。你应该努力至少学习语言基础知识。
  • 这是如何做大入口

标签: c++


【解决方案1】:

像这样传入 A。你的第二个和第三个参数也是 int 值,所以虽然我不会深入研究你的代码逻辑,但你应该选择一个整数来为你的数组排序提供界限。您现在传入的是数组中第一个元素的 int *,然后第三个参数是该值 + N。BAD NEWS BEARS!

#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;

}

【讨论】:

  • 工作。 Ty 非常感谢您的回复:)
【解决方案2】:

两件事:

  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.

【讨论】:

  • 工作。 Ty 非常感谢您的回复:)
【解决方案3】:

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

QuickSort(A,0,0+N);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多