我需要为qsort
编写一个带有指针成员的结构的比较函数。假设我有
struct foo2_struct
{
int a;
}
struct foo1_struct
{
int a;
struct foo2_struct *b;
}
这就是我所拥有的:
int cmp_foo1(const void *a, const void *b)
{
struct foo1_struct foo1a = *((struct foo1_struct) a);
struct foo1_struct foo1b = *((struct foo1_struct) b);
int cmp = foo1a.a - foo1b.a;
if (cmp == 0)
{
if (foo1a.b == foo1b.b)
return 0;
//how to continue???
}
return cmp;
}
请注意,foo2_struct
成员b
不是唯一的,因为此类型的两个不同变量可以具有相同的b
值。
答案 0 :(得分:1)
简单地替换
int cmp = a.a - b.a;
[...]
if (a.b == b.b)
通过
int cmp = foo1a.a - foo1b.a;
[...]
if (foo1a.b == foo1b.b)
因为你必须使用结构而不是void指针......
修改
另外你可以比较里面的结构而不是结构的指针(但我不知道你的目标......) 所以替换
if (foo1a.b == foo1b.b)
通过
if (foo1a.b->a == foo1b.b->a)
注意:我让你处理NULL场景:)