인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

kim-yoon님의 프로필 이미지
kim-yoon

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.5 2차원 배열과 메모리

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

작성

·

485

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

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

kim-yoon님의 프로필 이미지
kim-yoon

작성한 질문수

질문하기