실제 이동은 적당히 고통 스럽습니다. "현재 위치"에서 "이동 위치"로 모든 요소를 이동해야합니다. 당신은 정말 M
포인터의 첫 번째에 대한 포인터 p
포인팅을 수행하고 N
char
의 처음에 그 M
포인터 포인트 각각 (가 크기 N
char
의의의 배열의 크기 M
의 배열 인 것처럼 사용)하는 경우 : 다음
+---+ +---+---+---+---+
p ---> | * | ----> | a | b | c | d |
+---+ +---+---+---+---+
| * | --
+---+ \ +---+---+---+---+
| * | -----------> | i | j | k | l |
+---+ \ +---+---+---+---+
\
\ +---+---+---+---+
--> | e | f | g | h |
+---+---+---+---+
당신이 char
의 M의 첫 번째를 가리키는, 각각의 N 포인터의 첫 번째를 가리키는 새로운 포인터 (내가 q
를 호출)가 필요합니다 (참고 : 이것은 당신이 물어보다 다른 전위이다 for) :
+---+ +---+---+---+
q ---> | * | -----> | a | e | i |
+---+ +---+---+---+
| * | --
+---+ \
| * |etc \ +---+---+---+
+---+ ---> | b | f | j |
| * |etc +---+---+---+
+---+
그러나 런타임에 비교적 짜증나는 하위 스크립트 작성 및 캐시 누락 효과로 살아갈 수 있다면 으로 p[j][i]
또는 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