这可能是一个简单的问题,但我似乎无法做到正确(甚至没有足够的谷歌搜索)。请考虑以下示例:
Datum getDatum(...);
List* lappend(List *list, void *datum);
void my_fun(List **args){
lappend(*args, getDatum(...));
}
不幸的是,由于lappend
内my_fun
调用时参数2的指针不匹配,编译器会产生错误。我尝试添加*
,例如*(getDatum(...))
和&
,但两者都没有帮助。
该代码有什么问题?
答案 0 :(得分:2)
您无法将Datum
之类的值转换为void*
或Datum*
之类的指针。并且您绝对不能取消引用值类型(您尝试使用*(getDatum(...))
)如果将getDatum更改为
Datum* getDatum(...);
它应该编译,但我建议你阅读指针等。也知道如果你使用malloc()在某处分配Datum,应该有一个相应的free()调用,如果你把它变得很难虚无*清单中的所有内容。
答案 1 :(得分:1)
您不能这样做,因为getDatum
的返回类型是Datum
。
你能做的是,
void my_fun(List **args){
Datum data = getDatum();
lappend(*args, (void *)&data);
}