해결된 질문
작성
·
217
2
함수가 작동하는 구조가 이게 맞는지 궁금합니다.
매개변수로 이중 포인터를 집어넣으면 이중 포인터가 가리키는 포인터의 메모리 공간에
변환할 수 없는 문자의 공간의 주소를 대입해주는 게 맞나요?
이게 맞다면 굳이 그냥 포인터에 주소를 대입해 주는 게 아니라
이중 포인터를 매개변수로 이중 포인터가 가리키는 포인터에 주소를 대입해주는 이유가 뭔가요?
답변 1
2
안녕하세요, 질문&답변 도우미 Soobak 입니다.
네, 말씀하신 내용이 맞습니다.
이유는 strtol()
함수가 호출된 이후에도 end
포인터가 기리키는 위치를 알 수 있도록 하기 위함입니다.
간단히 예를 들어, char
자료형의 변수의 값을 함수 내부에서 변경하기 위해 char*
포인터를 사용하였던 것 처럼, char*
자료형의 포인터의 값을 변경하기 위해서 char**
이중 포인터를 사용하는 것입니다.
즉, 함수 내부에서 포인터의 값을 변경하기 위해 포인터의 주소(포인터가 가리키는 주소가 아닌, 포인터 변수의 주소)를 전달하는 것입니다.
네, 조금 더 정확하게는 '복사' 된 포인터의 주소를 넘겨주게 되면, 변경된 값이 함수의 지역 밖에서 반영되지 않기 때문입니다.
따라서, 변수의 값을 함수 내부에서 변경해주기 위해 변수의 주소를 인수로 전달하는 과정처럼,
함수의 인수로 포인터의 '주소'를 넘겨주는 것입니다.
아 그러니깐 그냥 end를 넘겨주면 포인터 변수의 주소가 아니라 포인터가 가리키는 주소를 넘겨주게 되서 포인터 변수의 값을 바꾸는 게 불가능해지기 때문에 &end를 넘겨주는 거라고 생각해도 될까요? 답변 정말 감사합니다