2

以下代码在我的脚本中行为不正确:

from ctypes import *
base_addr = c_uint64(0)
base_addr_temp = c_uint64(0)
print base_addr
print base_addr_temp
if(base_addr == base_addr_temp):
    print "val"

我得到的输出:

c_ulong(0L)

c_ulong(0L)

我正在使用 python 2.7.3 版本。

4

2 回答 2

5

我认为因为这些是对象,所以您必须按值比较它们:

base_addr.value == base_addr_temp.value

自从我完成任何 Python 以来已经有一段时间了,但是在许多语言中,只有当两个对象实际上引用同一个对象(即引用内存中的相同位置)时,它们才被认为是“相等的”。

于 2012-12-07T06:04:19.550 回答
2

您的比较是在两个对象的地址之间(“base_addr”和“base_addr_temp”),而不是在两个对象的值之间(都是 0L)

Weirdly, on windows 2.7.3 base_addr.str() returns 'c_ulonglong(0L)' which is different from what you saw -- but that doesn't change the fact that you were comparing data locations rather than values.

于 2012-12-07T06:09:47.380 回答