2012年2月21日 星期二

強制轉換二維陣列的行列數

有時在寫程式時,陣列會依照不同的演算法需要而改變行列的存取方式。

透過強轉型可以辦到這種要求:

  int main(int argc,char *argv[])
{
int row = 4;
int arr[5][5] = {{11,12,13,14,15},
{21,22,23,24,25},
{31,32,33,34,35},
{41,42,43,44,45},
{51,52,53,54,55}};

cout << arr[2][1] << endl;
//存取一個(2,1)的元素
//等效於*(arr + 2*5 + 1) => 32

cout << ((int*)arr)[11] << endl;
//轉換成一個一維的整數陣列
//等效於*(arr + 11) => 32

cout << ((int (*)[row])arr)[2][3] << endl;
//轉換成一個4列的整數陣列
//等效於*(arr + 2*4 + 3) => 32


return 0;
}


其他維度的轉型方法大同小異。

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...