Re: 81.3 질문
, 도장_ 관리자님이 작성상단에 고정된 이 게시물을 읽어보세요.
2차원 배열이라고 하지만, 실제로 메모리 상에는 1차원 배열로 붙어있습니다.
width가 15인 2차원 배열이 있다면 인덱스 번호 기준으로 0~14까지는 1층이라고 할 수 있습니다. 1층도 인덱스로 치면 0이고, 층 = height입니다.
위 코드에서 height는 y인데...
0~14를 찾아간다면 y = 0이고, width는 0~14 어딘가의 숫자만 있으면 갈 수 있습니다.
2층은 15~29입니다. x는 항상 0~14까지의 범위이니까 이걸로는 항상 1층만 갈 수 있습니다.
2층에 가려면 y * width가 필요하죠. 2층이니까 y = 1이고, width는 15이니까
y * width + x로 2층의 위치를 찾아가겠지요.
인간이야 아파트 충수는 엘리베이터에서 5층 누르면 5층으로 가지만,
한 층에 10호의 집이 있다면 메모리에서는 10호씩 건너 뛰어야 다음 층으로 올라갈 수 있습니다.
상단 고정 글에서도 m[0][0] ~ m[2][3]까지는 결국 메모리에 1차원으로 쭉 붙어 있을 뿐입니다. 포인터로 메모리를 동적으로 할당 할 때의 그림은 그림 38-3과 같습니다.
파일 처리는 1차원 배열일 뿐이고, 그림으로 표현하기 위해 2차원처럼 처리해서 화면에 뿌려야 그림으로 보이겠죠. 이 순서가 어긋나면 그림이 깨져 보이게 됩니다.