在C中的qsort结构,一些问题

时间:2013-11-29 01:20:44

标签: c sorting struct

void sortSchedule (struct event schedule[], int n)
{
    qsort(schedule, n, sizeof(struct event), compare());
}

int compare(const void * a, const void * b)
{
    const struct event *evA = a;
    const struct event *evB = b;

    int startA = evA.start.hour*60 + evA.start.minute;
    int startB = evB.start.hour*60 + evB.start.minute;

    return ( startA - startB );
}

我的结构

struct tod {
  int hour, minute;
};


struct event {
  struct tod start, end;
};

只使用compare代替compare(),编译器似乎将其视为变量。

其次,我想知道我的比较功能是否正确?因为我从编译器中得到了一些错误,更具体地说是以下

Error: request for member 'start' in something not a structure or union

^此行int startA = evA.start.hour*60 + evA.start.minute;

发生错误

所以我认为它认为evA不是一个结构,即使我明确地宣布它是这样的。这可能是因为我没有正确宣布它,任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:2)

由于evAevB是指针,因此您必须使用evA->member而不是evA.member

答案 1 :(得分:1)

如果您使用指针执行此操作,则应使用->来引用结构成员:

int startA = evA->start.hour*60 + evA->start.minute;
int startB = evB->start.hour*60 + evB->start.minute;

您对qsort的致电应该是:

qsort(schedule, n, sizeof(struct event), compare);

因为第四个参数是一个指向函数的指针。