比较结构与指针成员

时间:2015-06-17 13:18:58

标签: c pointers comparison

我需要为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值。

1 个答案:

答案 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场景:)