这是一个非常基本的问题。尽管如此,在网上研究了数十个半相关的例子后,我还没有找到解决方案。
我有一个二维的双精度数组,其大小在编译时是已知的:double demPMFs[ NUM_DEM_PARAMS ][ NUM_AGE_CATEGORIES ]
。数组条目在程序的早期由输入文件填充。我想将单个行作为一维数组传递给程序中的函数。理想情况下,我希望为每一行保留不同的名称:
#define LSPAN_PMF demPMFs[0][]
#define FLEDGE_PMF demPMFs[1][]
#define PAIR_PMF demPMFs[2][]
#define BIRTH_AGE_PMF demPMFs[3][]
#define SPLIT_AGE_PMF demPMFs[4][]
(此处,NUM_DEM_PARAMS = 5;
)。以下是将行传递给函数失败的尝试:
int calcDeath( double demPMFs[][ NUM_AGE_CATEGORIES ] ) {
int age_death = rmultinom( LSPAN_PMF, NUM_AGE_CATEGORIES );
return age_death;
}
int rmultinom( const double p_trans[], int numTrans )
// ...[code snipped]...
}
我现在收到关于原型的编译器错误;我希望也会遇到const
声明的问题。如果人们认为它们是相关的,我可以深入了解错误的细节,但我怀疑已经有很多东西可以直接设置。
答案 0 :(得分:2)
不使用array[index][]
,而是使用array[index]
:
#define LSPAN_PMF demPMFs[0]
// ... etc.
但为什么混淆使用数组呢?使用命名索引会更清楚:
enum {
IndexLspan,
IndexFledge,
// ...
};
int calcDeath( double demPMFs[][ NUM_AGE_CATEGORIES ] ) {
int age_death = rmultinom( demPMFs[IndexLspan], NUM_AGE_CATEGORIES );
接下来,为什么不首先使用C ++标准库中的容器?