将const double [] []数组作为参数传递给double **接口

时间:2011-09-22 10:49:48

标签: c++ pointers multidimensional-array argument-passing

我有一个2-dim const double矩阵,需要作为参数传递给一个带有(非const)double **参数的函数。

[CEqParams.h] // < given as is - can't do a thing about it

class CEqParams
{
public:
  void operator=(const CEqParams &right);  
  ...
  double dm_params[4][8];
};

[some_functions.h] // < dto.
...
void setEqParams(double **m);
...

[CEqParams.cpp]

void CEqParams::operator=(const CEqParams &right)
{
  setEqParams( « magic here » );
}

其中« magic here »(在代码片段的最后一段)中应取right.dm_params(或分别对其内容进行适当的表示)。

除了手动将right.dm_params传递给辅助double**结构(通过在所有数组字段上运行的嵌套循环并逐个复制它们),然后将后者传递给{{1我可以在这做吗?

PS:鉴于我能够将setEqParams传递给一个以right.dm_params(或double[][]?)作为参数的函数 - 我将如何摆脱{ {1}}? “提示”:double[4][8]不起作用。

1 个答案:

答案 0 :(得分:3)

一种相当丑陋的方式,至少不需要复制所有数据,就是创建一个临时的行指针数组,例如

void CEqParams::operator=(const CEqParams &right)
{
  double * dm_params_ptrs[4] = { dm_params[0], dm_params[1], dm_params[2], dm_params[3] };

  setEqParams(dm_params_ptrs);
}