c/c++ 一維數組指針轉二維數組指針


有時候會遇到這樣的函數:

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 測試通過。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM