qhrrkfl2   7달 전

그러니까 2차원 배열에 접근할 때 data = arr[y][x]; 하고 data = arr[y * width + x]; 이게 같다는데


arr[y][x] 는 *(arr[y]+x)와 같은거지

저 해괴망측한 식은 뭔가요?

gallopsys   7달 전

역시 말보단 그림이 빠르죠...! 제가 알고 있는 한에선 이렇습니다.

af815e5128fedc6122dfd95cad29b0e9.png

포인터를 사용한 2차원 배열 원소 접근 방법의 일반적인 경우입니다. 하지만 잘 생각해보면 2차원 배열도 1차원 배열의 연장선이라는 사실도 알고 계시리라 생각합니다.

아래의 그림을 한 번 봐주세요.

3f57e95f3f9235e2681bfcb742f48726.png

이렇게 본다면 사실 width[y]의 주소값(arr 포인터 상수로부터 떨어진 거리, offset) 계산할 때 y*width[열의 크기]*(자료형 크기)라는 과정이 생략된 것이라 볼 수 있습니다. 그래서 다음 해괴망측(?)한 식도 가능한 것이지요...


덧붙여 말하면 2차원 배열의 원소를 접근하는 방법은 여러 가지(?)가 존재합니다!

1. arr[y][x]
2. *(*arr + length) [단, length는 참조하려 하는 원소를 포함한 그 이전 원소들의 개수]
3. *(*arr + (y * [width] + x) [단, width는 열의 크기]
4. *(*(arr + y) + x)
5. *(arr[y] + x)
6. *(*(arr + y))[x]

또 더 있는지 모르겠네요....

qhrrkfl2   7달 전

감사합니다 선생님 

그런데 1,5 번은 기본적인 접근방법인데


**이런게 2개나 붙고 하면 어떻게 연산이 되는지 잘 모르겟는데 

설명해주실수 있으신가요?

qhrrkfl2   7달 전

2차원 배열 이름으로 값 참조 노트필기해놓은것 복습하니까 답 나오네요 감사합니다~

댓글을 작성하려면 로그인해야 합니다.