【问题标题】:C - Error: expected expression before intC - 错误:int 之前的预期表达式
【发布时间】:2014-02-20 18:24:39
【问题描述】:

我是 C 语言的初学者。我检查了我正在寻找的查询的各种讨论,但没有一个有帮助。 我为合并排序编写了一个代码,但出现以下错误:

  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
    }
    

我们将不胜感激!谢谢。

更新:先前的错误已解决。

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

【问题讨论】:

    标签: c arguments


    【解决方案1】:

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

    所以不是

    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。使用它,您将在几分钟内找到错误。

    【讨论】:

    • 对,调用的东西很清楚。不管怎样,这个问题解决了。但相反,我现在遇到了分段错误。 ://
    • 段错误可能是由于你调用了一个带有错误索引参数的函数,例如指向你程序之外的一个段。
    • 在我的答案中添加了一个部分。如果它解决了您的问题,请接受(并投票)。
    • 是的,我已经完成了所有基本的合并排序工作。我不明白这个错误。我是新来的,我们可以发布完整的代码并要求人们检查逻辑错误吗?
    • 为我的回答添加了更多解释。你也可以要求逻辑错误——我只是解释了一个:)。当然,您可以发布完整的代码,但请尝试对其进行修剪以使其尽可能相关。周围没有很多无关紧要的绒毛。
    【解决方案2】:
     MergeSort(A, 0, half-1);   //error in this line
     MergeSort(A, half, y);     //error in this line
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-20
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-22
        相关资源
        最近更新 更多