对象无效*

时间:2013-03-26 08:46:44

标签: c pointers

这可能是一个简单的问题,但我似乎无法做到正确(甚至没有足够的谷歌搜索)。请考虑以下示例:

Datum getDatum(...);
List* lappend(List *list, void *datum);

void my_fun(List **args){
   lappend(*args, getDatum(...));
}

不幸的是,由于lappendmy_fun调用时参数2的指针不匹配,编译器会产生错误。我尝试添加*,例如*(getDatum(...))&,但两者都没有帮助。

该代码有什么问题?

2 个答案:

答案 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);
}