Python中文
首页
教程
问答
标签
搜索
登录
注册
动态数组(结构数组)
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一个名为<code>person</code>的结构,如下所示:</p> <pre><code>struct person { int height, weight; }; </code></pre> <p>我还创建了一个<code>person</code>数组,如下所示:</p> ^{pr2}$ <p>我对<code>person</code>的数组执行以下操作:</p> <pre><code>struct Array_2d_ofperson{ int len; //indicates the length of this array(its supposed to be dynamic) Arrayofperson *subarray; //this is supposed to be the dynamic 2d array of person. }; </code></pre> <p>这是我的代码:</p> <pre><code>#include <iostream> #include "test.h" using namespace std; #define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT Arrayofperson create_arr_person(int len) { Arrayofperson arr_p; arr_p.len = len; arr_p.p = new person[len]; //populate the array here: for (int a = 0; a < len; a++) { arr_p.p[a].height = a; //yes they're the same, but it doesn't matter for now. arr_p.p[a].weight = a; }; return arr_p; } DLLEXPORT void print_arr_person(Arrayofperson pp) { printf("length: %d\n", pp.len); for (int b = 0; b < pp.len; b++) { printf("height, weight %d, %d\n", pp.p[b].height, pp.p[b].weight); }; } DLLEXPORT Array_2d_ofperson create_2darr_person(int len, int sublen) { Array_2d_ofperson arr_2d_person; arr_2d_person.len = len; arr_2d_person.subarray = new Arrayofperson[len]; for (int a = 0; a < len; a++) { arr_2d_person.subarray[a].len = sublen; arr_2d_person.subarray[a].p = new person[sublen]; for (int b = 0; b < sublen; b++) { arr_2d_person.subarray[a].p[b].height = b; arr_2d_person.subarray[a].p[b].weight = b; } }; for (int a = 0; a < len; a++) { for (int b = 0; b < sublen; b++) { printf("(a, b): %d, %d", arr_2d_person.subarray[a].p[b].height, arr_2d_person.subarray[a].p[b].weight); printf("\n"); } }; return arr_2d_person; cin.get(); } DLLEXPORT void print_2darr_person(Array_2d_ofperson pp) { int len = pp.len; int sublen = pp.subarray[0].len; //yes I haven't forgotten that it can change between different subarrays. for (int a = 0; a < len; a++) { for (int b = 0; b < sublen; b++) { printf("(a, b): %d, %d", pp.subarray[a].p[b].height, pp.subarray[a].p[b].weight); printf("\n"); } }; } </code></pre> <p>我打算从上面的代码中创建一个dll(这里的原因不重要)(后面会有更多的代码),并在python中使用它。我的问题是:</p> <p>1)当我在python端执行此操作时:</p> <pre><code>from ctypes import * test = CDLL('test.dll') //the dll from the code above, yes it works. arr = test.create_arr_person(6) test.print_arr_person(arr) arr2 = test.create_2darr_person(2, 3) #test.print_2darr_person(arr2) raw_input('h') </code></pre> <p>当我试图打印2d数组时,我会因为打印person数组而收到垃圾,并从windows收到访问冲突错误。在</p> <p>以下是我的问题,按重要性排序(我不想在dll中使用pythonapi,因为dll也可以被其他语言使用)</p> <p>1)如何使专用于array/2darray的内存保留在内存中,这样就不会出现访问冲突错误。我试过做静态的<code>Arrayofperson</code>,但没用。在</p> <p>2)怎样才能更容易地访问2d数组的子数组中的<code>person</code>,而不是这样做呢。 <code>pp.subarray[a].p[b]</code>。(我想这样做:pp<code>[a][b]</code>,其中pp是2darray of person)。我相信这与重载<code>[ ]</code>运算符有关,但我不熟悉生成类(这就是我现在创建结构的原因)。在</p> <p>3)如何使用相同的方法访问python中的array/2darray(我想在python中这样做:</p> <pre><code>test = CDLL('test.dll') array_of_person = test.create_arr_person(5) print (array_of_person[0]) #something like this </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我试着在Linux机器(GCC4.4.3)上编译代码,它可以工作。在</p> <p>你是否考虑过使用STL容器(vector)?可以使用向量向量生成多维数组,而不必担心内存泄漏。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在乒乓球比赛中预测球的轨迹,对于AI球拍预测?
10 回答
如何在乒乓球游戏中阻止球
1 回答
如何在乘法和模中不乘空间?
6 回答
如何在乘法和除以2个不同的数字之间进行交换?
1 回答
如何在也是数据一部分的单个字符上拆分大字符串
5 回答
如何在乾草堆中找到針,有更好的解決方案嗎?
3 回答
如何在事件wxWidgets中传递自定义数据
8 回答
如何在事件中使用lambda i=i?
1 回答
如何在事件中心只接收最近的数据
2 回答
如何在事件发生之前保持云函数运行?
7 回答
如何在事件发生后使页面重定向到同一页面
1 回答
如何在事件回调之间保持python生成器的状态
2 回答
如何在事件处理程序(pythonsocket、sphinx)中保留docstring
2 回答
如何在事件处理程序中更改wxRichTextCtrl的光标位置?
7 回答
如何在事件处理程序中访问外部对象?
10 回答
如何在事件循环中将协程打包为正常函数?
1 回答
如何在事件循环之外运行协同程序?
6 回答
如何在事件循环结束时为并发未来的所有线程调用类方法?
10 回答
如何在事件文件中只保留一份摘要?
1 回答
如何在事件模板中添加事件
6 回答