我需要声明一个数组(在c中),它包含两个2D数组和一个不同大小和不同类型的一维数组。
不幸的是,谷歌搜索没有真正帮助......
int ram [128][64];
int chk_ram [128][64];
char arr_block[8];
是否可以将这些数组打包在一个大数组中?
@unwind: 这是我的函数,它最初是一个Python函数,但因为它现在要慢我正在尝试用C处理这些数组,因为我希望它更快。 函数应该像Blackbox一样放入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合作:)
答案 0 :(得分:3)
为什么在使用结构时使用数组?
struct foobar {
int ram [128][64];
int chk_ram [128][64];
char arr_block[8];
}
或者,使用typedef:
typedef struct {
int ram [128][64];
int chk_ram [128][64];
char arr_block[8];
} Foobar;
在我对你的问题的理解中,你试图混合不同类型和长度的数组,这是容易出错的(至少在C中)。
如果需要从函数返回该结构,可以执行以下操作:
struct foobar myFunction(int c) { /* or Foobar */
struct foobar val;
/* stuff with val */
return val;
}
或者:
void myFunction(struct foobar *val, int c) { /* or Foobar */
val->ram[0][0] = c;
}
int main(void) {
struct foobar val;
myFunction(&val, c);
}
我肯定会使用指针(带struct foobar*
的第二个函数)因为否则你会复制整个结构,它会比指针版本慢。
如果您的功能需要初始化您的结构,并且如果您使用它进行更多工作,那么最好使用malloc
/ free
来避免不需要的副本。
答案 1 :(得分:2)
答案 2 :(得分:1)
是否可以将这些数组打包在一个大数组中?
不,你不能,因为数组的所有元素都具有相同的类型。