C 指向函数的指针,具有灵活的类型

C 指向函数的指针,具有灵活的类型,c,pointers,C,Pointers,我使用灵活类型的连接列表编写代码。 我的数据库包含一个节点列表,其中的数据可能是char*或VERTEX*(由我定义的结构)。因此,我将结构定义为带有字段void*。 我还希望有一个比较该字段中字符串的操作,因此列表中定义了一个字段: DATA_EQ DataEqual 并定义了一个函数,用于检查两个节点的数据是否相等: typedef BOOL (*DATA_EQ) (void* pl, void* pr); 为了为列表定义一个DATA_EQ函数,对于字符串数据,我在.c文件中创建了以下函

我使用灵活类型的连接列表编写代码。 我的数据库包含一个节点列表,其中的数据可能是char*或VERTEX*(由我定义的结构)。因此,我将结构定义为带有字段void*。 我还希望有一个比较该字段中字符串的操作,因此列表中定义了一个字段:

DATA_EQ DataEqual
并定义了一个函数,用于检查两个节点的数据是否相等:

typedef BOOL (*DATA_EQ) (void* pl, void* pr);
为了为列表定义一个DATA_EQ函数,对于字符串数据,我在.c文件中创建了以下函数:

static BOOL stringDataEqual(char* pd1, char* pd2){

    return ( strcmp(pd1, pd2) == 0 );
}
最后,我希望在我的列表中定义此函数,因此我写道:

pList->dataEqual = stringDataEqual;
但我想我试图将void*指定为char*的事实并不好。 我以前没有使用过函数指针,所以我可能犯了一些愚蠢的错误。。。 我得到警告(在运行gcc到complie之后):

警告:从不兼容的指针类型传递'ListCreate'的参数1[默认情况下已启用]

我需要在没有任何警告的情况下编译代码,如何解决/解决这个问题

感谢所有帮助过你的人,
Oded

使用强制转换向空指针和从空指针强制转换。您的功能变为:

static BOOL stringDataEqual(void* pd1, void* pd2) {
    return ( strcmp((char*)pd1, (char*)pd2) == 0 );
}
您可以通过将参数强制转换为
void*

什么是“数据库”来调用此函数?
\*
类型定义中是什么意思?