2017-10-13 89 views
0

Ç阵列我有一个C函数:
如何抓住在python

void func(int n, int m) 
{ 
    int Array[n][m]; 
    make_magic(Array); 
} 

这使得2D阵列和处理它。我在python3.5使用本功能与ctypes的是这样的:

from ctypes import * 

magic = CDLL('lib_name') 
magic.func(n,m) 

所以,我怎么能抢在python这个二维数组?

+0

什么阵列?该函数不返回任何内容。 – Goyo

回答

0

您必须处理返回的c数据类型,但在c函数中添加return语句。然后,您可以:

array = magic.func(n,m) 

或者,您可以使用swig在c代码周围创建一个python包装模块。然后你就可以直接调用python中的任何函数。

+0

C只能返回标量(int,bool,指针等),因此没有数组。此外,Python默认不支持数组。然而,即使两者都可行,近存储器C和解释的Python的对象结构可能会有很大的不同。 – Chickenmarkus

0

你想在Python中使用生成的数组,对吧?

采用你的C代码通过接收到的指针“返回”数组。

void func(int n, int m, int *Array) 
{ 
    Array[0][0] = 42; // fill array accordingly 
    make_magic(Array); 
} 

通过与NumPy数组初始化,您的函数来创建&对它进行处理,并与NumPy的后处理它:

from ctypes import * 
import numpy 
n, m = 5, 10 
array = numpy.zeros((n,m), dtype=numpy.int) 
magic = CDLL('lib_name') 
magic.func(n,m, array.ctypes.data)