강의

멘토링

로드맵

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

태0님의 프로필 이미지
태0

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터)

17강 포인터 조작과 출제패턴 / 10:00 / 이중포인터 출력 관련 문의

해결된 질문

작성

·

23

0

안녕하세요.

영상 10:00쯤(정확히는 10:39)에 printf(*(*ptr_b+1)); 부분 설명해 주실 때 *ptr_b+1은 ptr_b주소에서 char크기만큼 증가시키는거라고 설명해 주셨습니다.

그런데 이전 영상에서는 출력할때 포인터변수명 앞에 *(별표)를 붙이면 주소가 아닌 값을 가져오는거라고 설명해 주셨는데, 여기서는 왜 값이 아닌 주소를 불러오는건지 문의드립니다.

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

역참조는 값이 맞습니다. 그런데 그 값이 주소인 경우에는 헷갈리게 됩니다.

어떤 메모리의 주소가 다른 포인터에게는 값입니다. ("값" 자체가 다른 변수의 주소)

 

단계별로 설명드려보겠습니다.

char **ptr_b = &ptr_a;

 

  1. ptr_b의 타입은 char** (이중 포인터)

    • ptr_b에는 ptr_a의 주소가 담겨있습니다.

     

  2. *ptr_b를 하면?

    • "*를 붙였으니 값을 가져옵니다" (맞는 말)

    • 그런데 ptr_b가 char**이므로, *ptr_b의 타입은 char*입니다

    • char*는 포인터 타입이죠?

      따라서 가져온 "값"이 곧 "주소"(포인터)인 것입니다.

    • 즉, *ptr_b = ptr_a = str의 주소

  3. *ptr_b + 1은?

    • *ptr_b로 값(=주소)을 가져왔고

    • 그 주소에 +1을 해서 char 크기만큼 이동시킵니다.

  4. *(*ptr_b + 1)은?

    • 다시 *를 붙여서 그 주소에 있는 값을 최종적으로 가져옵니다.

핵심 정리

  • *를 붙이면 값을 가져온다"는 설명 자체는 맞습니다.

  • 다만, 포인터의 경우 그 "값" 자체가 "주소"입니다.

  • *ptr_b는 값을 가져오는데, ptr_b가 이중 포인터이므로 가져온 값이 char* 타입의 주소인 것입니다.

이것이 바로 이중 포인터의 개념입니다.

포인터를 가리키는 포인터이기 때문에, 한 번 역참조하면 여전히 포인터(주소)가 나오는 것이죠.

 

이렇게만 보면 어려울 수 있는데, 실제로 제가 설명하는 것처럼 네모칸 위아래를 그려서 메모리 주소와 값을 작성해서 따라가면 크게 어렵지 않게 이해하실 수 있을 겁니다. 

0

안녕하세요, 인프런 AI 인턴입니다. 태0님.

이중 포인터와 관련된 질문에서 혼란스러움을 겪으셨군요. 포인터의 이해를 돕기 위해 설명을 드리겠습니다.

  1. 포인터의 기본 개념:

    • *ptr_b: 이 부분은 ptr_b가 가리키고 있는 메모리 주소의 값을 가져옵니다. 즉, ptr_b가 저장하고 있는 주소의 값을 가져오게 됩니다.
    • (*ptr_b + 1): ptr_b가 가리키고 있는 배열의 첫 번째 요소에 접근한 후, 그 다음 요소의 주소로 이동하는 것을 의미합니다.
  2. 포인터 연산:

    • *(*ptr_b + 1): 이는 최종적으로 두 번째 레벨의 포인터를 통해 해당 메모리 주소에 저장된 을 가져오기 위한 전체 표현식입니다. 즉, ptr_b가 가리키고 있는 포인터가 포인트하는 위치에서 다음 요소의 값을 가져오라는 의미입니다.

따라서, 이번 설명에서 *(*ptr_b + 1)이 주소를 가리키는 것이 아닌, 두 단계의 역참조를 통해 실제 저장된 값을 가져온 것임을 이해하셔야 합니다.

포인터와 메모리 주소 참조에 대해 더 많은 예시와 설명을 원하신다면, 다음 링크를 통해 관련 정보를 참조하세요:

저는 태0님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

태0님의 프로필 이미지
태0

작성한 질문수

질문하기