• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

2차원배열을 1차원배열처럼..

20.06.26 11:14 작성 조회수 366

3

교수님께서 2차원 배열도 결국 1차원 배열과 같은 구조로 작동한다고 하셔서 아래와 같은 코드를 작성해봤는데 

int main()

{

int arr[2][3] = { {1,2,3}, {4,5,6} };

printf("%d\n", arr[1][1]);

printf("%d\n", *(arr + 4));

return 0;

}

첫번째 printf 에서는 예상한 값과 동일하게 5가 나왔는데,

두번째 printf 에서 *(arr+4) = arr[4] = arr[1][1] 일줄 알았는데 전혀 다른 값이 나와서 당황스럽습니다. 

제가 지금 까지 강의를 잘 못이해한건 아닐까 라는 생각도 듭니다. 왜 이런 결과가 나온 걸까요?

답변 1

답변을 작성해보세요.

1

Hello Yeo님의 프로필

Hello Yeo

2020.06.26

2차원 배열은 이중포인터이기 때문에 dereference를 두 번 해주어야합니다.
*(*(arr+1)+1) 이런식으로 해줘야 arr[1][1]과 같아집니다.
하셨던 대로 접근하시려면 *(*(arr)+4)로 해주어야겠네요.
**(arr+4) 로 해주면 전혀 엉뚱한 곳으로 접근하게 될 겁니다.
이유에 관해서는 1차원 배열을 만들고, &arr+@ 연산을 해보시면 이해하실 수 있을 것이라 생각되네요.