【发布时间】:2017-03-01 15:26:13
【问题描述】:
好吧,我最初把这个问题的表述搞砸了(自从我认真编写 C++ 代码以来已经一年多了,而且我对纯 C 的经验非常有限),所以让我们再试一次。
编写一些 C 代码是为了期望您执行以下操作
void* p;
create_new_thing(&p); //p is now a new thing
do_stuff_to_thing(p); //something happened to p
我的问题是如何在 Julia 中创建对象 p。现在我相信答案是
p = Ref{Ptr{Void}}()
ccall((:create_new_thing, :lib), Void, (Ptr{Ptr{Void}},), p)
ccall((:do_stuff_to_thing, :lib), Void, (Ptr{Void},), p)
此外,我相信相同的代码,但将 p 声明为 p = Array(Ptr{Void}, 1) 也可以。
然而,我确实发现 Julia 中 Ref 和 Ptr 之间的整个区别非常令人困惑,主要是因为它们似乎以我无法跟踪的方式相互转换。
【问题讨论】:
-
详细信息:
void* p;,p是一个“新事物”(对象)。create_new_thing(&p);允许函数分配p一个值。祝朱莉娅好运。 -
明白,我没有使用对象这个词的原因是我担心过于具体。例如,可以使用不可变的数字类型来做到这一点。
-
在 C 中,object 是 通用 术语,表示“数据存储区域...,其内容可以表示值”,如字符、整数、浮点、指针、数组、结构、联合和常量。几乎所有可以指向的东西,除了函数。
标签: c julia void-pointers