【发布时间】:2018-11-16 07:00:16
【问题描述】:
我有一个函数,它接受一个指向浮点数组的指针。根据其他条件,我知道指针实际上指向的是 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...
}
}
float (somethingAsMatrix)[2] = (float ()[2]) matrixReturnAsArray;
这很好用。
如果我想在下标中提及值作为变量,该变量将根据某些条件而变化。
如果我这样做,它会显示警告:ISO C++ 禁止可变长度数组。从这里我怎样才能动态地创建一些东西?
【问题讨论】:
-
使用 std::vector。
-
请填写一些缺失的代码,我认为您甚至没有显示出现错误的行。
-
呃...“这很好用”?什么是
(float ()[2]),什么编译器使它“工作正常”?这甚至不会编译。 -
我会使用 typedef,它让事情变得容易多了。类似 typedef float twoByTwo[2][2];我已经尝试过了,但我认为它会起作用。
-
@NeilButterworth std::vector 在这种情况下是一个错误的工具。
标签: c++ arrays matrix multidimensional-array casting