Хорошо, я изначально плохо прищурил свою формулировку этого вопроса (прошло уже больше года, так как я серьезно написал код на C++, и у меня довольно ограниченный опыт с чистым C), поэтому давай попробуем снова.Правильный способ объявить C void указатели в Julia
Часть кода C пишется ожидать вас сделать что-то вроде следующего
void* p;
create_new_thing(&p); //p is now a new thing
do_stuff_to_thing(p); //something happened to p
Мой вопрос в том, как создать объект 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)
работает.
Я все же различаю между Ref
и Ptr
в Джулии очень запутанным, главным образом потому, что они, похоже, преобразуются друг в друга способами, которые я не могу отслеживать.
деталь: с 'ничтожной * р,', 'p' это "новая вещь"(объект). 'create_new_thing (&p);' позволяет функции _assign_ 'p' значение. Удачи с Джулией. – chux
Понял, причина, по которой я не использовал объект слова, заключается в том, что я опасался быть очень конкретным. Можно было бы это сделать, скажем, неизменный числовой тип. –
В C _объект_ является _general_ термином для «области хранения данных ...», содержимое которой может представлять значения «как символы, целые числа, плавающие точки, указатели, массивы, структуры, объединения, и константы. Почти все, на что можно обратить внимание, кроме функций. – chux