我有一个函数,它接受一个指向浮点数数组的指针。根据其他条件,我知道该指针实际上指向一个2x2或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++工作。
float *
没有指向多维任何内容的方法。float *
指向一个浮点数,它可能是单维浮点数组中的第一个值。但它不指向任何子数组,正如您需要多维数组一样。2x2 和 3x3 都是二维的,因此两者都可以是float **
。不过,实际上,您最好创建(或查找)并使用专用的Matrix
类。 - KRyanfloat a[2][2]
与float**
不兼容。 - Ben Voigtfloat a[2][2];
仍然是一个存储在连续内存中的单个float
序列,但具备编译器提供的二维地址计算。你可以写float* p = &a[0][0];
然后自己进行索引计算。 - Ben Voigt