c-会员申请.在某种不是结构的东西中



我对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;
}

我本来打算在qsort中使用comp函数。你知道我为什么会犯这个错误吗?

在您的代码中

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

应该是

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

否则,(您可能已经知道)由于运算符优先级的原因,强制转换在这里将无效。

正如另一个答案中所提到的,你的括号在这里:

(((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 *

相关内容

  • 没有找到相关文章

最新更新