ctypes数组中元素上的ctypes指针

时间:2018-07-09 07:50:40

标签: python ctypes

是否有一种方法可以获取指向ctypes数组中间的元素的指针? 示例:

lib = ctypes.cdll.LoadLibrary('./lib.so')
arr = (ctypes.c_int32 * 100)()
lib.foo(arr)

现在,我不想使用指向foo的第一个元素的指针来调用arr,而是在第十个指针。那相当于C表示法&arr[9]

lib.foo(&arr[9])

有一个聪明的方法吗?

1 个答案:

答案 0 :(得分:3)

byref有一个可选参数,用于向地址添加字节偏移。

test.dll(Windows)

__declspec(dllexport) int foo(int* arr)
{
    return *arr;
}

示例:

>>> from ctypes import *
>>> lib = CDLL('test')
>>> arr = (c_int * 100)(*range(100))
>>> arr[9]
9
>>> lib.foo(arr)
0
>>> lib.foo(byref(arr,sizeof(c_int) * 9))
9