如果我有以下两组代码,我该如何将它们粘合在一起?

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)

如何使用x中连续的元素列表调用c_函数?我试着把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)

C++相关问答推荐

如何将匿名VLA分配给指针?

找出文件是否包含给定的文件签名

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

仅在给定的大小和对齐方式下正确创建全局

当输入负数时,排序算法存在问题

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

加密解密工作正常,但返回错误0x80090005

在创建动态泛型数组时,通过realloc对故障进行分段

在Linux上使用vscode和lldb调试用Makefile编译的c代码

是否需要包括<;errno.h>;才能使用perror?

如何确保我将使用C标准库函数的函数版本,如&getc";,而不是类似函数的宏版本?

我在C程序的Flex/Bison中遇到语法错误

程序如何解释变量中的值

存储和访问指向 struct 的指针数组

Matlab/Octave对conv2函数使用哪种方法?

在分配内存后使用指针是未定义的行为吗?

使用 c 中的 write() 函数将非 ASCII 字符写入标准输出

cs50拼写器分配中的无限循环

多行表达式:C 编译器如何处理换行符?

C 预处理器中的标记分隔符列表