python数组地址传递给C.

时间:2016-11-20 06:53:34

标签: python c arrays

我想将python数组缓冲区的地址传递给另一个应用程序或c函数,

buf = array("d", range(10))
addr, count = buf.buffer_info()
print "Address of buffer ", addr

输出:

Address of buffer  0x28a3ab0

此地址是buf数组的第一个元素的实际内存地址吗?

这是类似于C的地址,是buf的第一个元素的地址吗?

如果不是,我如何在python中声明一个缓冲区并将其地址传递给c函数并使用其值并像C数组一样寻址?

如果此地址是实际的内存地址,我可以在C。{/ p>中的memcpy()函数中使用此地址

1 个答案:

答案 0 :(得分:0)

正如the documentation所写,可以将它用作地址。但请注意按照说明使用buffer protocol

  

返回一个元组(地址,长度),给出当前的内存地址和   用于保存数组内容的缓冲区元素的长度。   内存缓冲区的大小(以字节为单位)可以计算为   array.buffer_info()1 * array.itemsize。 这偶尔会有用   使用低级(和固有的不安全)I / O接口时   需要内存地址,例如某些ioctl()操作。该   只要数组存在且没有,返回的数字就是有效的   长度变化操作适用于它。

     

注意从C或C ++编写的代码中使用数组对象时(唯一的   有效利用这些信息的方式),更有意义   使用数组对象支持的缓冲区接口。这个方法是   保持向后兼容性,新的应该避免   码。缓冲区接口记录在Buffer Protocol