심심해서 지식인을 돌다가, 재미있는 질문글을 발견 하고 답변을 달고 있었다.
(내가 글을 열심히 썼는데, 누가 먼저 답변하고 채택됬다고 더 안올라간다 ;;;)
아까워서, 나름 포인터 이해에도 한층 도움을 준듯 하여 블로그에 남긴다.
질문의 요지는 이것이다.
여기서 왜, 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 |