본문 바로가기

볼봇의 코딩 생활/C++

[C++] 이중 포인터 사용 예

심심해서 지식인을 돌다가, 재미있는 질문글을 발견 하고 답변을 달고 있었다.

(내가 글을 열심히 썼는데, 누가 먼저 답변하고 채택됬다고 더 안올라간다 ;;;)

 

아까워서, 나름 포인터 이해에도 한층 도움을 준듯 하여 블로그에 남긴다.

 

 

 

 

 

질문의 요지는 이것이다.

 

여기서 왜, ip 변수의 값이 바뀌지 않느냐 인데...

그 풀이를 남기면 다음과 같다.

 

 

 

 

 

 

int *ip = NULL;

에서, ip 포인터 변수는 아무것도 가르키지 않게 된다.

 

f(ip);

에서, f 를 호출 할 때 nullptr 을 복제하여 f(int *p) 에 넘겨준다.

 

 

 

 

 

결과

보다 싶이, nullptr (0) 가 넘어감을 볼 수 있다.

 

여기서 짚어야 하는 점은, main() 의 ip 포인터 변수가 복제되어 f() 에 넘어갔기 때문에

f() 부분의 p 와 main() 의 ip 는 다르다.

(즉, p 의 값을 바꿔도 ip 부분이 바뀌지 않는다.)

 

p = &data;

에서, p 라는 포인터 변수에 data 의 주소값을 넣는다.

함수가 끝나면 p 포인터 변수는 소멸된다..

 

그래서, main() 의 ip 포인터 변수는 값이 바뀌지 않고 남게 된다.

 

 

 

이를 옳은 코드로 고치려면...

 

 

 

 

 

결과

위와 같이, f() 를 호출 할 때 ip 포인터 변수의 포인터 값을 넘겨주고

이중포인터 이므로, f() 에서 이중 포인터로 해당 포인터 주소값을 받는다.

7 라인에서, 이중 포인터 p가 가르키는 포인터에 data 의 주소값을 넣어주면

 

main() 에서도 바뀜을 볼 수 있다.

 

 

포인터 개념이 약간 부족했다면 위 문제를 풀어보면 좋다고 생각 한다.

 

 

문제는 아래 글에서 가져왔다.

https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=342643188&mode=answer

'볼봇의 코딩 생활 > C++' 카테고리의 다른 글

[C++] 공유체 union 과 구조체 struct  (0) 2019.08.28
[C++] auto 와 decltype 의 차이  (0) 2019.08.26