传递一行静态二维数组以在C ++中运行

时间:2010-06-21 19:28:36

标签: c++ function arrays

这是一个非常基本的问题。尽管如此,在网上研究了数十个半相关的例子后,我还没有找到解决方案。

我有一个二维的双精度数组,其大小在编译时是已知的: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声明的问题。如果人们认为它们是相关的,我可以深入了解错误的细节,但我怀疑已经有很多东西可以直接设置。

1 个答案:

答案 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 ++标准库中的容器?