【发布时间】:2014-08-25 13:26:11
【问题描述】:
我需要声明一个数组(在 c 中),其中包含两个 2D 数组和一个 1D 数组,其中包含不同大小和不同类型的数组。
不幸的是我的谷歌搜索并没有真正帮助......
int ram [128][64];
int chk_ram [128][64];
char arr_block[8];
是否可以将这些数组打包成一个大数组?
@unwind: 这是我的函数,它最初是一个 Python 函数,但因为它很慢,我现在尝试用 C 处理这些数组,因为我希望它快得多。 该函数应该像一个黑盒,我将 3 个数组放入其中,然后输出 3 个数组,这些数组将返回到 Python。
这是C函数(我认为其中有一些错误):
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int test(int **ram,int n_ram,int **chk_ram, int n_chk_ram,int **arr_block,int n_arr_block){
int i,j,k;
int yDog,p,x,d,y,z;
int *args_arr = (int*)malloc(size*sizeOf(int));
int *dog = (int*)malloc(size*sizeOf(int));
for (yDog=0;yDog<=8;yDog++){
p=yDog*8;
line='' ?? /* ?? */
for (x=0;x<=128;x++){
d=0;
if (chk_ram[(int)(x/16),yDog] == 1){
if (x%16 == 0){
arr_block[(int)(x/16),yDog] = ''; /* ?? */
}
for (y=0;y<=8;y++){
z = pow(2,y)
d += ram[x,p+y]*z;
}
arr_block[(int)(x/16),yDog] += chr(d); /* ?? */
if ((x+1)%16 == 0 && x){
chk_ram[(int)(x/16),yDog] = 0;
line += arr_block[(int)(x/16),yDog]; /* ?? */
}
}
else{
if ((x+1)%16 == 0 && x){
chk_ram[(int)(x/16),yDog] = 0;
line += arr_block[(int)(x/16),yDog];
x += 1;
}
else{
x+=15;
}
}
}
}
dog[yDog] = line; /* ?? */
args_arr = {ram, chk_ram, arr_block)
return args_arr;
}
如果有人知道,我会使用 Ctypes :)
【问题讨论】:
-
结构数组?
-
typedef struct{int ram[128][64];int chk_ram [128][64];char arr_block[8];} MYARRAY; -
我不知道你所说的“结构”是什么意思,但我认为这个问题是数组应该保存不同的数据类型,所以对我来说这似乎是不可能的,因为哪个数据类型有大数组持有上面的3个数组?我需要这个来从函数返回所有数组(这个函数只能返回 1 个整数数组)......所以对我来说有点困惑^^
-
@user2127024 您应该显示您尝试使用的函数的声明。通常,您实际上不能在 C 中返回一个数组,因此看看该代码是什么样子有点有趣。也许它可以帮助我们了解您想要做得更好。
-
@user2127024 不能有不同类型的多维数组,也不能直接从函数返回数组。而是将您的 3 个数组放在一个结构中。这样,您也可以从函数中返回这样的结构。
标签: c arrays multidimensional-array