Я хотел бы translate
следующую функцию C:присваивая значения `* x` через C-интерфейс Юли
static void my_C_func(int *x) {
*x = 100;
return;
}
в функцию Джулии. Возможно:
function my_julia_func(x::Ptr{Cint})
*x = 100
return
end
В my_julia_func
, линия с *x = 100
не работает, конечно. Что мне делать с этой линией?
Для получения дополнительной информации my_C_func
является функцией обратного вызова в C, и я пытаюсь создать оболочку Julia для обратного вызова.
ОБНОВЛЕНИЕ Похоже, Ptr(x)=100
. Я тестировал два аргумента указатель:
function my_julia_func(x::Ptr{Cint}, y::Ptr{Cint})
Ptr(x) = 100
Ptr(y) = 200
println("*x = ", Ptr(x))
println("*y = ", Ptr(y))
end
В результате
*x = 200
*y = 200
Кажется странным. Если я:
function my_julia_func(x::Ptr{Cint}, y::Ptr{Cint})
Ptr(x) = 100
println("*x = ", Ptr(x))
Ptr(y) = 200
println("*y = ", Ptr(y))
end
я получаю:
*x = 100
*y = 200
Как я должен сделать это правильно?
Когда я только напечатанный x
и y
, он показывает:
x = Ptr{Int32} @0x00007fff5d57685c
y = Ptr{Int32} @0x00007fff5d576858
Это не действительная функция C. – Lundin
@ Lundin LOL ... Вы видите, что я, конечно, не очень хорош в C ... Теперь все в порядке? – Chang
Да, теперь это правильно, хотя 'return;' не требуется. – Lundin