0

これは簡単な質問かもしれませんが、私はそれを正しく理解できないようです(十分なグーグルでも)。次の例を考えてみましょう。

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

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

lappend残念ながら、。内の呼び出しでパラメータ2のポインタが一致しないため、コンパイラはエラーを生成しますmy_fun*とのようにを入れようとしまし*(getDatum(...))&が、どちらも役に立ちませんでした。

そのコードの何が問題になっていますか?

4

2 に答える 2

2

のような値から、、Datumのようなポインタに変換することはできません。また、 getDatumを次のように変更した場合、値型(で試したもの)を逆参照することはできません。void*Datum**(getDatum(...))

Datum* getDatum(...);

コンパイルする必要がありますが、ポインタなどを読んでおくことをお勧めします。malloc()を使用してDatumをどこかに割り当てる場合は、対応するfree()の呼び出しがあるはずです。これは、すべてをvoid*リスト。

于 2013-03-26T08:51:16.523 に答える
1

getDatumのリターンタイプがであるため、これを行うことはできませんDatum

あなたにできることは、

void my_fun(List **args){
   Datum data = getDatum();
   lappend(*args, (void *)&data);
}
于 2013-03-26T08:50:54.883 に答える