我需要为具有指针成员的结构编写一个 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
值。
最佳答案
简单地替换
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 场景:)
关于将结构体与指针成员进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30892842/