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

2 つのループが必要です。1 つは反転する行用で、次にその行の各要素を反転します。したがって、3x2 マトリックスを反転するint rowと、0 から 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 に答える