【问题标题】:void funct(int (*compare)(a,b))无效函数(int(*比较)(a,b))
【发布时间】:2014-05-31 20:47:45
【问题描述】:

我正在尝试做一个我的老师用 C 语言给我的练习,但我被困在这里

这是我的代码:

typedef struct First_s
{
    double a;
    double b, c;
    double d;
} First_t;

typedef struct Second_s
{
    char e[10];
    long f;        
    First_t g; 
} Second_t;

int compare(Second_t *x, Second_t *y)
{
    if(x.g.b >y.g.b){
        return 1;
    }else{
        return 0;
    }
}
void sortList(Second_t list[], long len, int (*compare) (Second_t *a, Second_t *b)){
}

谁能告诉我如何使用这个 *compare 函数。 我在网上找了,但我真的不知道如何找到它,因为我不知道这种函数是如何调用的。

谢谢你:)

【问题讨论】:

  • 您将编译器错误消息发布为标题,但从不提及您的问题中的编译问题。你在问什么?
  • 对不起,我马上改了。没想到:(
  • *compare 是一个指向函数的指针。为该参数传递一个函数, . . . .就像你的“int compare”函数一样。
  • @JonathonReinhart 我在问如何使用 void sortlist() 参数中的 (*compare) (Second_t *a, Second_t *b)
  • @user3344003 但是如何在 void sortList() 函数中使用它,当我尝试这样做时: if(compare(a,b) == 0) 它不起作用: (

标签: c struct compare declaration


【解决方案1】:

由于篇幅问题,我不得不切换到答案。

如果从上面的内容中出现,你想要得到类似的东西

Second_t    somelist [5000000000] ;
. . . .

sortList (somelist, 5000000000, compare) ;

您没有说明这一点,但上下文表明目标是拥有一个可以处理不同比较方法的通用排序函数。比较方法被指定为 sortList() 的函数参数。

 Second_t a, b ;

 if (compare (&a, &b))

应该可以。

【讨论】:

  • 谢谢你:D 这很有帮助。我不能给你+1,因为我的声誉低于 15 :(。还有别的,是蝙蝠在 sortList() 函数所在的行和定义 sortlist 的行给我一个警告跨度>
  • 这取决于,警告是什么? “我收到警告很糟糕吗?”就像“黄灯亮着是不是很糟糕?”
【解决方案2】:

您可以像这样调用 sortList 中的比较函数:

int a, b;
(*compare)(&a,&b)

【讨论】:

  • 谢谢。很抱歉没有给 +1,但我不能因为我的声誉低于 15 :(
  • 您可以省略(* 和第一个) 以获得更好的可读性。
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2017-01-21
  • 2014-10-19
  • 2010-10-11
相关资源
最近更新 更多