为了增加代码的并行化,我试图使用具有17个不同子阵列的结构,而不是具有一个巨大的17维数组的结构,通过这样做:
int n_1[box1];
int n_2[box2];
int n_3[box3];
int n_4[box4];
int n_5[box5];
int n_6[box6];
int n_7[box7];
int n_8[box8];
int n_9[memvara];
int n_10[memvarb];
int n_11[memvarc];
int n_12[memvard];
int n_13[adirect];
int n_14[tdirect];
int n_15[fs];
int n_16[bs];
int n_17[outputnum];
// Set up a pointer-based structure
typedef struct calookup_b
{
int *n_1;
int *n_2;
int *n_3;
int *n_4;
int *n_5;
int *n_6;
int *n_7;
int *n_8;
int *n_9;
int *n_10;
int *n_11;
int *n_12;
int *n_13;
int *n_14;
int *n_15;
int *n_16;
int *n_17;
} calookup_b;
而不是这个,目前在代码中大量使用:
typedef struct calookup
{
signed char n[box1][box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];
double raw;
} calookup;
当我遇到这样的电话时,我遇到了麻烦:
for (m = 0; m < outputnum; m++)
{
behaviour[m] = calookup->n[s3][s4][s5][s6][wa][wb][aa][ab][a->memm[0]][a->memm[1]][a->memm[2]][a->memm[3]][a->lightdirection][a->lightsense][a->fsa][a->maxload][m];
... }
我如何将两者等同?我应该编写一个具有17个以上输入的函数来返回巨型多维数组的值,还是有更优雅的方式?
答案 0 :(得分:2)
17维数组与17个数组不同。简单案例:
int array[3][3][3]; // This can hold 3x3x3 = 27 elements
int array1[3];
int array2[3];
int array3[3]; // Together, they can hold only 9 elements.
您可以使用:
int array1[3][3];
int array2[3][3];
int array3[3][3]; // Together, they can hold 27 elements.
将这个类比用于17维阵列......
数组:
signed char n[box1][box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];
可以转换为:
signed char n1[box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];
signed char n2[box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];
...
signed char nN[box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];