【发布时间】:2012-08-05 19:56:33
【问题描述】:
我有一个函数,它接受一个指向浮点数组的指针。基于其他条件,我知道指针实际上指向一个 2x2 OR 3x3 矩阵。 (实际上内存最初是这样分配的,例如 float M[2][2] )重要的是我想在函数体中做出这个决定,而不是作为函数参数。
void calcMatrix( int face, float * matrixReturnAsArray )
{
// Here, I would much rather work in natural matrix notation
if( is2x2 )
{
// ### cast matrixReturnAsArray to somethingAsMatrix[2][2]
somethingAsMatrix[0][1] = 2.002;
// etc..
}
else if(is3x3)
{ //etc...
}
}
我知道我可以使用模板和其他技术来更好地解决这个问题。我的问题实际上是关于如何在### 评论中制作这样的演员表。使用 C++ 工作。
【问题讨论】:
-
我认为您正在尝试解决错误的问题(即“如何投射?”很少是正确的问题)。对于“如何轻松使用多维数组”的问题,我写了一个简单的解决方案。一次:ideone.com/gytw7
-
float *不可能指向多维 anything (除非您不应该进行非常糟糕的转换,如果编译器让你)。float *指向一个浮点数,它可能是一维浮点数数组中的第一个值。但它并不指向任何子数组,因为您需要一个多维数组。 2x2 和 3x3 都是 2D,所以两者都可以是float **。但实际上,创建(或查找)并使用专用的Matrix类会更好。 -
好的,我可以将输入参数更改为 float **。但是你是说在float aMDarray[3][3]的情况下,不保证元素的存储是连续的吗?
-
@DragonWraith:对不起,你错了。
float a[2][2];与float**不兼容。 -
@DragonWraith:不过,这仍然是错误的。
float a[2][2];仍然是一个连续存储的float的单个序列,但使用编译器提供的二维地址计算。然后你可以写float* p = &a[0][0];自己做指数计算。
标签: c++ c casting multidimensional-array matrix