Ответ 1
Следующий код работает с произвольными списками:
import ctypes
pyarr = [1, 2, 3, 4]
arr = (ctypes.c_int * len(pyarr))(*pyarr)
Если у меня есть следующие два набора кода, как их склеить?
void
c_function(void *ptr) {
int i;
for (i = 0; i < 10; i++) {
printf("%p", ptr[i]);
}
return;
}
def python_routine(y):
x = []
for e in y:
x.append(e)
Как я могу вызвать c_function со смежным списком элементов в x? Я попытался использовать x для c_void_p, но это не сработало.
Я также пытался использовать что-то вроде
x = c_void_p * 10
for e in y:
x[i] = e
но это приводит к синтаксической ошибке.
Код C явно хочет адрес массива. Как это сделать?
Следующий код работает с произвольными списками:
import ctypes
pyarr = [1, 2, 3, 4]
arr = (ctypes.c_int * len(pyarr))(*pyarr)
Из учебник ctypes:
>>> IntArray5 = c_int * 5
>>> ia = IntArray5(5, 1, 7, 33, 99)