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