ctypes中使用POINTER和pointer表示指针,在使用POINTER时需要设置指向的数据类型,而pointer则直接从变量中得到一个特定类型的指针。
test.c
#include <stdio.h>
void test_func(int* num, int length)
{
for (int i = 0; i < length; i++) {
num[i] = i;
}
}
编译:gcc -fPIC -shared test.c -o test.so
python调用
from ctypes import cdll
from ctypes import *
myLib = cdll.LoadLibrary("/home/hekuan/test.so")
length = 20
num =( c_int * length) () # 申请内存
myLib.test_func(pointer(num),length)
for i in range(0, length):
print( num[i], end=" ")
结果:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
传入的指针需要提前申请内存,且so中不能指针越界。