我無法理解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'>
換句話說,指針已經在過程的某個地方被取消引用。