私はもともとこの疑問の私の定式化をひどく悩ましました(これは真剣にC++コードを書いてから1年以上経ちました。もう一度お試しください。JuliaのC voidポインタを宣言する適切な方法
いくつかのCコードは、次の
void* p;
create_new_thing(&p); //p is now a new thing
do_stuff_to_thing(p); //something happened to p
私の質問は、ジュリアにオブジェクトp
を作成する方法であるように、あなたが何かをすることを期待して書かれています。今私は、私は同じコードを信じているが、p
でp = Array(Ptr{Void}, 1)
も働く代わりとして宣言され、答えはさらに
p = Ref{Ptr{Void}}()
ccall((:create_new_thing, :lib), Void, (Ptr{Ptr{Void}},), p)
ccall((:do_stuff_to_thing, :lib), Void, (Ptr{Void},), p)
であると信じます。
私は、ジュリアのRef
とPtr
の間の全体的な区別が非常に混乱していることがわかりました。なぜなら、私は追跡できない方法でお互いに変換されているからです。
詳細は以下のとおりです。 '無効* pで、'、 'p'は "新しいこと"(オブジェクト)です。 'create_new_thing(&p);')は、関数が値を割り当てていることを許可します。Juliaとの幸運 – chux
私がオブジェクトという言葉を使わなかった理由は、私が非常に具体的であることを懸念していたからです。 –
Cでは、_object_は "データ保存領域..."の_general_という用語で、その内容は文字、整数、浮動小数点、ポインタ、配列、構造体、共用体などの値を表すことができます。関数を除いて指すことのできるものについて – chux