首页 > 解决方案 > 表的指针表?

问题描述

我正在尝试从其他表构建一个引用表,如下所示:

//*** TABLE 1 ***
double ref_table1[2][3] = {{10, 5.100, 0},
                          {21, 17.620, 26}
}; 

double fit_table1[5][2] = {{0.020, 23},
                    {-0.450, 1},
                    {0.060, 2},
                    {0.098, 5},
                    {0.410, 1}
};

//*** TABLE 2 ***

double ref_table2[2][3] = {{10, 5.100, 0},
                          {21, 17.620, 26}
}; 

double fit_table2[5][2] = {{0.020, 23},
                    {-0.450, 1},
                    {0.060, 2},
                    {0.098, 5},
                    {0.410, 1}
};

(为了简化示例,此处的表格相同,但它们当然不同)

然后是我试图引用但不断出错的地方:

static double **tables[][2] = {{ref_table1, fit_table1},
                               {ref_table2, fit_table2}
};

然后我阅读了这个主题:

创建指向二维数组的指针

并尝试:

static double (*tables)[][2] = {{ref_table1[0], fit_table1[0]},
                              {ref_table2[0], fit_table2[0]}
};

但在这种情况下,我仍然无法弄清楚,如何正确地做到这一点。我也想知道这是否真的可能,因为 ref_tables 和 fit_tables 有不同的尺寸。我只是认为这是可能的,因为它们最终都是对“双重”的引用。有小费吗?

谢谢

标签: carrayspointers

解决方案


“ref”表和“fit”表的维度不兼容,因此没有适用于两者的“指向数组的指针”类型。您将需要struct使用适当的“指向数组的指针”类型的成员定义一个类型。

struct reffit {
    double (*ref)[3];
    double (*fit)[2];
};

struct reffit tables[] = {{ref_table1, fit_table1},
                          {ref_table2, fit_table2},
                         };

您还可以向结构添加其他成员以保存每个表中的行数,以防行数可能不同:

#define ARRAY_LEN(x) (sizeof (x) / sizeof *(x))

struct reffit {
    size_t nrefs;
    double (*ref)[3];
    size_t nfits;
    double (*fit)[2];
};

struct reffit tables[] = {
    {
        .nrefs = ARRAY_LEN(ref_table1), .ref = ref_table1,
        .nfits = ARRAY_LEN(fit_table1), .fit = fit_table1
    },
    {
        .nrefs = ARRAY_LEN(ref_table2), .ref = ref_table2,
        .nfits = ARRAY_LEN(fit_table2), .fit = fit_table2
    },
};

推荐阅读