본문 바로가기
[개발자 로드맵]/C

[C언어 코딩 도장 심사문제 답] 34.10_포인터와 주소 연산자 사용하기

by Ramrider 2022. 7. 15.
728x90
반응형

1. 답

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int* numPtr1;
    int** numPtr2;
    int num1;

    scanf("%d", &num1);

    numPtr1 = &num1;
    numPtr2 = &numPtr1;

    printf("%d\n", **numPtr2);

    return 0;
}

2. 결과

실행결과

3. 정리

C언어를 학습하다보면 분명히 내가 포인터를 잘 아는 것 같았는데도 부족함을 느끼게되어 앞을 반복해서 읽게되는 현상이 많이 발생되는 것같습니다.

이중포인터 문제인데 numPtr2 = &numPtr1; 부분에서 명확하게 파악할 필요가 있었습니다. 포인터를 사용하는 목적이 가리키는 데이터를 사용하기 위한 것이었는데, 이중포인터 이상 부터는 주소 값 자체를 처리할 데이터로 생각하는 것도 좋을 것같습니다. 즉, 주소를 저장한 포인터도 하나의 변수이고 따라서 그 주소를 구할 수 있으며 또 다른 포인터에 저장하고 가리키는 방식입니다. 포인터는 꼭 변수의 데이터를 건드리지않고 주소만을 가져가는 변수입니다. 따라서 numPtr2 = numPtr1이 될수 없고 numPtr2 = &numPtr1이 되게 됩니다. 헷갈렸던 부분은 numPtr1의 데이터가 num의 주소값을 갖고 있어서 numPtr2=numPtr1을 해도 가능할 것이라 생각했던 부분이었는데, 이부분은 포인터의 정의를 명확하게 이해하지 못한데서 발생한 것으로 생각됩니다.

 

4. 비고

 

코딩 도장: 사이트에 로그인

사이트의 강좌를 수강하고 학습 효과를 최대한 높이려면 회원 가입이 필요합니다. '회원 가입' 버튼을 클릭한 후 가입 정보를 입력합니다.입력한 이메일 주소로 확인 메일이 즉시 전송됩니다.이

dojang.io

 

728x90
반응형

댓글