use*_*966 5 c struct void-pointers
我将struct Person类型的数据传递给链表,因此每个节点的数据指针指向一个结构Person.
struct Person {
char name[16];
char text[24];
};
Run Code Online (Sandbox Code Playgroud)
我试图遍历列表并通过调用打印每个节点中的名称/文本
traverse(&list, &print);
Run Code Online (Sandbox Code Playgroud)
遍历的原型是:
void traverseList(struct List *list, void (*f)(void *));
Run Code Online (Sandbox Code Playgroud)
列表定义为:
struct List {
struct Node *head;
};
Run Code Online (Sandbox Code Playgroud)
我的print函数接受void*数据:
print(void *data) { .... }
Run Code Online (Sandbox Code Playgroud)
我知道我必须将数据转换为struct Person,对吗?
struct Person *person = (struct Person *)data;
printf("%s", person->name);
Run Code Online (Sandbox Code Playgroud)
我知道这是不够的,因为我得到了"从不兼容的指针类型初始化"警告.在这种情况下,如何成功投出空白*?谢谢.
问题不在于强制转换,甚至不在于传递函数的方式。问题是您的声明print缺少返回类型,在这种情况下int通常是假设的。编译器会抱怨,因为您将 an 传递int (*)(void*)给需要void (*)(void*).
修复起来很容易:只需void在函数声明前面添加即可print。看:
https://gist.github.com/ods94065/5178095
| 归档时间: |
|
| 查看次数: |
10359 次 |
| 最近记录: |