1
int* m = new int [d1*d2]; 


   ptr1 = m; 
    ptr2 = m + (d2*(d1-1));

     if ( *ptr1 != *ptr2){  
       temp = ptr2;     
       ptr2 = ptr1;     
       ptr1 = temp;
    }
ptr1 +=d2;
ptr2 -= d2;

为了做

4 1

3 7

5 2

5 2

3 7

4 1

这是我到目前为止想出的,几乎什么都没有。我在寻找适合哪种循环时遇到问题。

4

3 回答 3

2

只需反转整个事情,然后反转每一行:

row/col representation:
4 1 => 2 5 => 5 2
5 2    1 4    4 1

actual layout of m:
4 1 5 2 => 2 5 1 4 => 5 2 4 1
于 2013-05-10T16:04:49.513 回答
0

您需要两个循环,一个用于要翻转的行,然后翻转该行上的每个元素。因此,在翻转 3x2 矩阵时,从 0 运行int row到 2,从 0 运行到 1。int column

于 2013-05-10T23:03:42.333 回答
0

之前的答案中已经描述了更好的方法。所以我的回答将解决为什么你的输出没有任何变化。您正在交换指针而不是值。你想做:

temp = *ptr2;     
*ptr2 = *ptr1;     
*ptr1 = temp;

--ptr2;
++ptr1;
于 2013-05-10T23:10:52.717 回答