gpt4 book ai didi

c - 具有灵活类型的函数指针

转载 作者:行者123 更新时间:2023-11-30 21:10:15 25 4
gpt4 key购买 nike

我编写了带有灵活类型连接列表的代码。我的数据库包含一个节点列表,其中的数据可能是 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 进行编译后):

warning: passing argument 1 of ‘ListCreate’ from incompatible pointer type [enabled by default]

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

提前感谢任何提供帮助的人,奥德

最佳答案

使用强制转换来强制转换为 void 指针或从 void 指针强制转换。你的函数变成:

static BOOL stringDataEqual(void* pd1, void* pd2) {
return ( strcmp((char*)pd1, (char*)pd2) == 0 );
}

您可以通过将参数强制转换为 void* 来调用此函数。

关于c - 具有灵活类型的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com