有時候會遇到這樣的函數:
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 測試通過。