要求成员..非结构化

时间:2018-12-28 15:29:01

标签: c arrays function pointers compare

我对C编程很陌生,我不知道为什么我得到标题中提到的错误。我正在尝试编写一个函数,用于比较结构中的年龄数组。这是结构:

typedef struct
{
    int index;
    float age;

} index;

这是函数,我在以下位置遇到错误的代码部分:

int comp ( const void *a, const void *b)
{
    if ((((index*) a)->age)>(((index*) b->age)))
        return 1;
    else if ((((index*)a)->age)<(((index*)b)->age))
        return -1;
    return 0;

}

我打算将comp函数与qsort一起使用。请问为什么我会收到此错误?

2 个答案:

答案 0 :(得分:2)

在您的代码中

 (((index*) b->age)))

应该是

(((index*) b)->age))
           ^^^------------------added parenthesis here

否则,({em>您可能已经知道)由于operator precedence,此处的转换将无效。

答案 1 :(得分:0)

如另一个答案中所述,您的括号不在此处:

(((index*) b->age))

您可以通过创建适当类型的指针并使用那些指针而不是大量强制类型转换来避免将来发生此类错误:

int comp ( const void *p1, const void *p2)
{
    const index *a = p1;
    const index *b = p2;

    if (a->age > b->age)
        return 1;
    else if (a->age < b->age)
        return -1;
    return 0;
}

还要注意,这里不需要强制转换,因为您可以自由地与void *之间进行转换。