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

将结构中的元素与C中的空指针值进行比较,c,pointers,struct,compare,void,C,Pointers,Struct,Compare,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*与其他值进行比较,直到我找到

我需要创建一个函数,它接收一个结构指针和一个空指针,如果元素在结构上,它将返回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;
    }
 }
这是否正确?

(*stData)。val
属于
int
类型,因此您需要将
强制转换为
int*
,然后像这样取消引用它:

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

您必须根据正在比较的数据键入
。在
int
的情况下,您必须确保比较的是指针处的值,而不是指针本身

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

如果我想使用->操作符,它会像:*(int*)key==stData->val right?根据作为
key传递的内容,这样的代码将面临难看的对齐问题。例如,如果指针从未指向
int
,则不能将
char
-指针转换为
int
-指针。应该如何调用
compare
?。。。或者更具体地说:调用
compare()
时,作为第二个参数传递的是什么?…按此键。。。F下一次如果你输入一个“我”的话,会有一个有趣的转变……好了。抱歉,粘贴源代码后脱机。您的方法面临的问题与我在对haccks答案的评论中评论的问题相同。。