Как преобразовать список Python в массив C с помощью ctypes?

Если у меня есть следующие два набора кода, как их склеить?

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 явно хочет адрес массива. Как это сделать?

Ответ 1

Следующий код работает с произвольными списками:

import ctypes
pyarr = [1, 2, 3, 4]
arr = (ctypes.c_int * len(pyarr))(*pyarr)