将结构体与指针成员进行比较

标签 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 值。

最佳答案

简单地替换

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/

相关文章:

javascript - 比较 Javascript 中的类型

c - 这是错误还是内存意外?

c - C缓冲区溢出的解释

c - 获取指向 char 的三重指针的地址

c - 我的 Int* 数组是否全部初始化为 NULL?

python - 比较两个不同的 python 计数器对象

c - 如何更改此程序以按患者姓名和紧急程度的顺序打印?

c - pthread 中函数的参数数量

c - C 中指向无效位置错误的指针

java - 如何在 Kotlin 中使用现有的比较器