将结构中的元素与C中的void指针值进行比较

时间:2015-03-01 18:55:18

标签: c pointers struct compare void

我需要创建一个接收结构指针和void指针的函数,如果元素在结构上,则返回1.

typedef struct {
    char *sx;
    int val, code, qtty;
    char abc [20];
} ST_DAT;

int compare (ST_DAT *, void *);

这是比较双链表中节点的程序的一部分,但这个函数用作:

int (*pfun)(ST_DAT *, void *));

问题是我不知道如何将void *与其他值进行比较,直到我发现内部的值为止。

int compare (ST_DAT *stData, void *key)
{
    if (key == (*stData).val || key == (*stData).code || key == (*stData).qtty || strcmp (key,(*stData).abc) || strcmp (key,(*stData).sx) )
    {
       return 1;
    }else{
       return 0;
    }
 }

这是对的吗?

2 个答案:

答案 0 :(得分:1)

(*stData).val属于int类型,因此您需要将key投射到int *,然后将其取消引用:

*(int *)key == (*stData).val

答案 1 :(得分:0)

您必须根据您要比较的数据对key进行类型转换。并且您必须确保在int的情况下比较指针的值而不是指针本身。

  if (*(int*)key) == (*stData).val || *(int *)key == (*stData).code || (int *)*key == (*stData).qtty || strcmp((char *)key,(*stData).abc) || strcmp ((char *)key,(*stData).sx) )