The recommended way to create concrete array types is by multiplying
any ctypes data type with a positive integer. Alternatively, you can
subclass this type and define length and type class variables.
Array elements can be read and written using standard subscript and
slice accesses; for slice reads, the resulting object is not itself an
Array.
Example:>>> from ctypes import *
>>> TenIntegers = c_int * 10
>>> ii = TenIntegers(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
>>> print ii
>>> for i in ii: print i,
...
1 2 3 4 5 6 7 8 9 10
>>>
因此,第一部分ctypes.c_int * len(x)创建一个带有len(x)元素的数组类型:In [17]: ctypes.c_int * 10
Out[17]: __main__.c_int_Array_10
In [18]: ctypes.c_int * 100
Out[18]: __main__.c_int_Array_100
创建类型后,应调用它并传递数组元素:
^{pr2}$
In [24]: x = [1, 2, 3]
In [25]: (ctypes.c_int * len(x))(*x)
Out[25]: <__main__.c_int_array_3 at>
In [26]: list((ctypes.c_int * len(x))(*x))
Out[26]: [1, 2, 3]
In [27]: (ctypes.c_int * len(x))(*x)[1]
Out[27]: 2
不能传递x,因为__init__需要整数:In [28]: (ctypes.c_int * len(x))(x)
-
TypeError Traceback (most recent call last)
in ()
> 1 (ctypes.c_int * len(x))(x)
TypeError: an integer is required (got type list)