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

时间:2015-06-05 18:14:03

标签: c pointers

我编写了一个包含灵活类型连接列表的代码。 我的数据库包含一个节点列表,其中的数据可能是char *或VERTEX *(由我定义的struct)。因此我将结构定义为字段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后编译):

  

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

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

感谢任何帮助过的人, 乌迪德

1 个答案:

答案 0 :(得分:0)

使用强制转换来转换为void指针。你的职能变成了:

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

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