将结构中的元素与C中的空指针值进行比较
我需要创建一个函数,它接收一个结构指针和一个空指针,如果元素在结构上,它将返回1将结构中的元素与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*与其他值进行比较,直到我找到
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答案的评论中评论的问题相同。。