我正在将 struct Person 类型的数据传递给链表,因此每个节点的数据指针都指向一个 struct Person。
struct Person {
char name[16];
char text[24];
};
我正在尝试遍历列表并通过调用打印每个节点中的名称/文本
traverse(&list, &print);
遍历的原型(prototype)是:
void traverseList(struct List *list, void (*f)(void *));
列表定义为:
struct List {
struct Node *head;
};
我的打印函数接受一个 void * 数据:
print(void *data) { .... }
我知道我必须将数据转换为 Person 结构,对吗?
struct Person *person = (struct Person *)data;
printf("%s", person->name);
我知道这还不够,因为我收到了“从不兼容的指针类型进行初始化”警告。在这种情况下,我怎样才能成功转换 void* ?谢谢。
最佳答案
问题不在于转换,甚至不在于您传递函数的方式。问题是您的 print
声明缺少返回类型,在这种情况下通常假定为 int
。编译器报错是因为您将 int (*)(void*)
传递给需要 void (*)(void*)
的函数。
修复起来很容易:只需在 print
函数声明前添加 void
即可。见:
关于从 void* 转换为 struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453593/