以下是C文件:
addone.h
#ifndef __ADDONE
#define __ADDONE
void addone(float *in_data, int size);
#endif
addone.c
void addone(float *in_data, int size)
{
int i = 0;
for(int i = 0; i < size; i++)
{
in_data[i] = in_data[i] + 1;
}
}
我正在尝试将此函数用于Ctypes:
import ctypes
libaddone = ctypes.cdll.LoadLibrary("libaddone.so")
libaddone.addone.argtypes = (ctypes.POINTER(ctypes.c_float), ctypes.c_int)
a = [1,2,3]
array_type = ctypes.c_float * 3
libaddone.addone(array_type(*a), ctypes.c_int(3))
print a
但是对于a
我得到了相同的结果:[1,2,3]
在读取输出时,我做错了什么?你知道吗
Python中的
*a
已经失去了对原始数组的跟踪;相反,它为数组的元素创建了一个新的不可变的元组对象,并且这个元组作为位置参数传递给array_type
对象构造函数,这使得另一个可变数组对象成为可能。就是这个对象在addone
中被修改。你知道吗你可以试试
相关问题 更多 >
编程相关推荐