C - 错误:int之前的预期表达式

时间:2014-02-20 18:24:40

标签: c arguments

我是C的初学者。我检查了我正在寻找的查询的各种讨论,但没有一个帮助。 我为Merge Sort编写了一个代码,我收到了以下错误:

  1. 'int'之前的预期表达式

  2. 函数'MergeSort'的参数太少

    int *list;  //pointer to array of integers 
    int * MergeSort(int *A, int x, int y);  //function definition, the function returns a pointer to an array of integers. 
    
    int * MergeSort(int *A, int x, int y) //function declaration
    {
    //some code
    
         int size=1+y-x;
         int half=size/2;
    
         MergeSort(int *A, 0, half-1);   //error in this line
         MergeSort(int *A, half, y);     //error in this line
    
    //some code
    }
    
  3. 非常感谢帮助!谢谢。

    更新:解决了以前的错误。

    分段错误(核心转储)。我不明白这个问题。这是我编写的代码的链接。  http://ideone.com/mHXQ66

3 个答案:

答案 0 :(得分:2)

调用函数时,不需要指定参数的类型。

所以而不是

MergeSort(*A, 0, half - 1);

你做

// You already specified that A was a pointer in your function definition: int *A
MergeSort(A, 0, half - 1);

如果你想调用这个函数,比如说你在顶部定义的list参数,你就写了

MergeSort(list, myX, myY); // where myX and myY are defined somewhere, relating to your list

关于你的功能,你需要在功能体中增加一些肉。当您的阵列分成大小为1的片段时,您尤其需要检查案例。所以添加此

if(x - y < 2) // if run size == 1
    return;  

否则你永远不会回来!想想x == y,你只需要反复调用MergeSort(A,0,0)直到你的堆栈溢出。


关于细分错误

我看不到您链接到的完整代码有什么问题。对我来说似乎很好,但我没有机会为你调试你的程序。相反,我将指向DDD,它是GDB调试器的图形前端,使其更加用户友好。

可以下载here,以及一个很棒的调试教程can be found here。使用它,您将在几分钟内找到错误。

答案 1 :(得分:0)

 MergeSort(A, 0, half-1);   //error in this line
 MergeSort(A, half, y);     //error in this line

答案 2 :(得分:0)

A作为参数传递时,无需指定类型,只需使用值名称

MergeSort(A, 0, half - 1);
MergeSort(A, half, y);