実際の転位は中程度の痛みを伴います。すべての要素を「現在の位置」から「転位の位置」に移動する必要があります。あなたは本当にN
char
S(それはchar
SのサイズN
の配列のサイズM
の配列だかのように使用される)の最初にM
ポインタの最初を指すポインタp
、およびそれらのM
ポインタの各点を持っている場合:その後、
+---+ +---+---+---+---+
p ---> | * | ----> | a | b | c | d |
+---+ +---+---+---+---+
| * | --
+---+ \ +---+---+---+---+
| * | -----------> | i | j | k | l |
+---+ \ +---+---+---+---+
\
\ +---+---+---+---+
--> | e | f | g | h |
+---+---+---+---+
はあなたがchar
S Mの最初を指し、それぞれが、Nポインタの最初を指す新しいポインタ(私はq
を呼び出します)必要があります(注:これはあなたが尋ねたよりも異なる転置でありますfor):
+---+ +---+---+---+
q ---> | * | -----> | a | e | i |
+---+ +---+---+---+
| * | --
+---+ \
| * |etc \ +---+---+---+
+---+ ---> | b | f | j |
| * |etc +---+---+---+
+---+
しかし、実行時に比較的厄介なサブスクリプト書き込みやキャッシュミスの影響を受けて暮らすことができる場合は、またはp[N-1-j][i]
などにアクセスして、移調することを「ふり」することができます。これはいくつかのマクロで最も簡単かもしれません:
#define ORIENTATION_A(p, M, N, i, j) ((p)[i][j])
#define ORIENTATION_B(p, M, N, i, j) ((p)[(N)-1-(j)][i])
/* etc */
(注:上記はテストされていません)。
の可能複製[すべての余分なスペースを使用せずに行列を90度回転させる方法は?](http://stackoverflow.com/questions/3488691/how-to-rotate-a-matrix-90-degrees -with-using-any-extra-space) – Vijay