为了提高代码的并行化,我尝试使用具有 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 个以上输入的函数来返回巨型多维数组的值,还是有更优雅的方法?
最佳答案
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];
关于c - 使用多个小数组代替大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32079362/