1 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)您調(diào)用 時(shí)c_int(val1),您正在創(chuàng)建一個(gè)新c_int對(duì)象。此對(duì)象包含 C 風(fēng)格的整數(shù)變量。byref您可以使用函數(shù)調(diào)用輕松獲得指向它的指針。int另一方面,Python 的類型不是可變的,也不能被修改,即使你確實(shí)找到了它的地址;因此val1,var2不能交換。所以你的樣本應(yīng)該看起來(lái)更像:
from ctypes import *
var1 = c_int(10)
var2 = c_int(20)
lib = cdll.LoadLibrary('./swaplib.so')
lib.swap_addr.argtypes = [c_void_p, c_void_p]
print ("Before swap var1 and var2 is " + str(var1.value) + " & " + str(var2.value))
lib.swap_addr( byref(var1), byref(var2) )
print ("After swap var1 and var2 is " + str(var1.value) + " & " + str(var2.value))
順便說(shuō)一下,POINTER產(chǎn)生一個(gè)指針類型,這在你的Addr_Var1和Addr_Var2. 直到您在 的參數(shù)中創(chuàng)建了它們指向不同位置的類型的值swap_addr,并且它們被立即丟棄(很可能以錯(cuò)誤的順序)。
添加回答
舉報(bào)