我无法理解Python ctypes中LP_ *(例如LP_c_char)和* _p(例如c_char_p)指针之间的区别。有文件区分它们吗?ctypes中LP_ *指针和* _p指针有什么区别? (和奇怪的与结构的交互)
我读过关于* _p指针的小小暗示它们更好(以某种未指定的方式),但是当我尝试将它们用作结构体域时,会出现奇怪的行为。例如,我可以创建具有LP_c_char指针字段的结构体:
import ctypes
char = ctypes.c_char('a')
class LP_Struct(ctypes.Structure):
_fields_ = [('ptr', ctypes.POINTER(ctypes.c_char))]
struct = LP_Struct(ctypes.pointer(char))
print type(struct.ptr)
并将所得指针是:
<class 'ctypes.LP_c_char'>
但是,当创建一个结构与c_char_p指针字段:
class Struct_p(ctypes.Structure):
_fields_ = [('ptr', ctypes.c_char_p)]
p = ctypes.pointer(char)
struct = Struct_p(ctypes.cast(p, ctypes.c_char_p))
print type(struct.ptr)
所得 “PTR” 字段是
<type 'str'>
换句话说,指针已经在过程的某个地方被取消引用。