2017-10-13 121 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)