Python结构中的动态数组和结构

Python结构中的动态数组和结构,第1张

Python结构中的动态数组和结构

我正在对OP的需求做一些假设,如果有更简单的方法可以满足我的要求,那是我的想法:

演示
import stringfrom ctypes import Structure,c_int,c_char_p,POINTER,cast,pointer,byref,CDLLclass Row(Structure):    _fields_ = [('cols_count', c_int),      ('cols', POINTER(c_char_p))]    def __init__(self,cols):        self.cols_count = cols        # Allocate an array of character pointers        pc = (c_char_p * cols)()        self.cols = cast(pc,POINTER(c_char_p))class Unit(Structure):    _fields_ = [('rows_count', c_int),     ('rows',POINTER(Row))]    def __init__(self,rows,cols):        self.rows_count = rows        # Allocate an array of Row structures.        # This does NOT call __init__.        pr = (Row * rows)()        # Call init manually with the column size.        for r in pr: r.__init__(cols)        self.rows = cast(pr,POINTER(Row))unit = Unit(2,3)# Stuff some strings ('aaaaa','bbbbb',etc.)for i in xrange(unit.rows_count):    for j in xrange(unit.rows[i].cols_count):        unit.rows[i].cols[j] = string.ascii_lowercase[i*5+j]*5dll = CDLL('test.dll')dll.my_func(byref(unit))
测试
#include <stdio.h>struct _rows {    int cols_count;    char **cols;};struct _unit {    int rows_count;    struct _rows *rows;};__declspec(dllexport) int my_func(struct _unit *param){    int i,j;    for(i=0;i<param->rows_count;i++)        for(j=0;j<param->rows[i].cols_count;j++) printf("%d,%d = %sn",i,j,param->rows[i].cols[j]);    return 0;}
生成文件

与Visual Studio 2010一起编译

test.dll: test.c    cl /W4 /LD test.c
输出量
0,0 = aaaaa0,1 = bbbbb0,2 = ccccc1,0 = fffff1,1 = ggggg1,2 = hhhhh


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5057636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存