강의

멘토링

커뮤니티

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

Jungmin Lee님의 프로필 이미지
Jungmin Lee

작성한 질문수

C 와 C++ 을 동시에 배워보자 - 두들낙서의 C/C++

28 - 포인터 배열

2차원 배열 관련 질문입니다.

작성

·

372

0

안녕하세요. 포인터를 공부하고 있는 학생입니다.

 

예를 들어 1차원 배열이 있을 떄

 

int a = 2;

int b = 3;

int* ptr[2] = { &a,&b };

for (int i = 0; i < 2; i++) {

printf("%d ", *ptr[i]);

}

이렇게 하면 2,3이 나오는건 알겠습니다.

 

2차원 배열로 넘어가서 

 

int a1[3]= { 1,2,3 };

int b1[3] = { 10,20,30 };

int* ptr1[2] = { a1,b1 };

 printf("%d\n", *a1); --> 이때 1이 나오는 것도 알겠습니다. a1은 a1[0]의 주소값이 들어있고 *a1을 함으로써 a1[0]을 가리키니까요.

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) {

printf("%d ", ptr1[i][j]);

}

printf("\n");

}

--> 문제는 볼드체로 표시한 부분인데, ptr1[i]가 사실상 포인터여서 &ptr1[i][0]이라는 것을 배웠습니다. 그렇다면 ptr1[i][j]도 &ptr1[i][j]이라는 것인데, 그러면

printf("%d ", ptr1[i][j]);

이걸 했을 때 ptr1[i][j]의 주소값이 나와야하지 않나요? *ptr1[i][j]를 하니까 에러가 뜹니다. 1차원 배열에서는 *를 써줘야 오히려 원소가 나왔는데 왜 이차원 배열에서는 안써줘도 되는지 궁금합니다.

 

감사합니다!

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
Jungmin Lee님의 프로필 이미지
Jungmin Lee

작성한 질문수

질문하기