我有一个 C 函数声明如下:
void getIndexOfState(long *p, long C, long G, long B, long *state);
现在我的 cython 包装器代码使用 numpy 数组中的缓冲区语法:
cpdef int getIndexOfState(self, np.ndarray[np.int_t, ndim=1, mode="c"] s):
cdef long out
getIndexOfState(&out, self.C, self.G, self.B, <long*> s.data)
return out
我想使用新的 memoryview 语法,我的问题是,如何在使用 memoryview 时将指针传递给数据?
我试过:
cpdef int getIndexOfState(self, long[:] s):
cdef long out
getIndexOfState(&out, self.C, self.G, self.B, s)
return out
当我尝试编译模块时,这引发了“无法将类型'long [:]'分配给'long *'”错误。在调用 C 函数之前,有什么方法可以在不将 memoryview 强制回 numpy 数组的情况下传递该指针?