出于各种原因,我想更新ctypes指针的值。换句话说,我想要的是修改指针对象包装的内部缓冲区。以下是一种可能的方法:
from ctypes import *
a = pointer(c_int(123))
b = pointer(c_int(456))
memmove(addressof(a), addressof(b), sizeof(c_void_p))
a._objects.clear()
a._objects.update(b._objects)
现在a.contents
将返回c_long(456)
。然而,玩弄objects属性似乎过于关注实现细节(这甚至会正常工作吗?)。有没有更惯用的方法来做这个?在
既然艾尔克森还没把答案贴出来,我就自己把它加在这里。应该这样做:
现在
a.contents = c_int(456)
。关键在于tmp
与a
共享一个缓冲区(这就是为什么您会找到tmp._b_needsfree_ == 0
)。在指针是一个保存内存地址的变量,因此调用}指向的同一内存位置。如果你想要,那是什么。在
memmove(addressof(a), addressof(b),...)
实际上将b
保存的地址复制到a
所以a
现在指向{如果要将
a
指向的整数的值设置为与b
所指整数相同的值,则需要将b
指向的地址处的内存内容复制到a
指向的内存中。像这样。。。在现在,指针
a
指向一个内存地址,该地址保存的值与b
指向的内存中存储的值类似。在在这两种情况下,
_objects
属性不是必需的(IMHO)很抱歉这个无聊的帖子。但我恐怕是(唯一的?)指针操作方法:)
相关问题 更多 >
编程相关推荐