有时候会遇到这样的函数:

void func(float m[3][3])
{
}

而你手头上有个数据:

float data[9];

直接用函数调用,会提示类型转换错误,那么怎么传进去?

传统方法1,生成一个二维数组指针:

float* p[3] = ( data, data + 3, data + 6 };
func(p);

另外一种方法,比较绕:

typedef float mat3[3][3];  // 声明一个3x3数组类型
func(*reinterpret_cast<mat3*>(data));

解释:

把 data 转换成 mat3* 类型的指针,再取值。直接 mat3(data) 同样提示类型转换失败。

另外的写法是:

func(*reinterpret_cast<float(*)[3][3]>(data);

vc、bcc32、gcc 测试通过。