【发布时间】:2013-03-05 10:02:12
【问题描述】:
我将 struct Person 类型的数据传递给链表,因此每个节点的数据指针都指向一个 struct Person。
struct Person {
char name[16];
char text[24];
};
我正在尝试遍历列表并通过调用打印每个节点中的名称/文本
traverse(&list, &print);
遍历的原型是:
void traverseList(struct List *list, void (*f)(void *));
列表定义为:
struct List {
struct Node *head;
};
我的打印函数接受一个 void * 数据:
print(void *data) { .... }
我知道我必须将数据转换为 struct Person,对吗?
struct Person *person = (struct Person *)data;
printf("%s", person->name);
我知道这还不够,因为我收到“从不兼容的指针类型初始化”警告。在这种情况下,我怎样才能成功施放 void*?谢谢。
【问题讨论】:
-
traverse的原型是什么?list是哪个类型的? -
您可能想要检查您是如何传递列表以进行遍历的,以及您实际使用打印的方式。您显示的所有内容似乎都匹配。
-
@ValeriAtamaniouk 我已经编辑了我的问题以包含这些内容。
-
@user1889966 是按原样声明的
print,还是返回void?如果声明不返回,大概是int -
@ValeriAtamaniouk 我很抱歉没有包括在内,它被声明为静态无效。
标签: c struct void-pointers