• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

저도 6분 30초경 &end가 이해가 잘 안되요

24.02.14 01:39 작성 조회수 107

2

함수가 작동하는 구조가 이게 맞는지 궁금합니다.

매개변수로 이중 포인터를 집어넣으면 이중 포인터가 가리키는 포인터의 메모리 공간에

변환할 수 없는 문자의 공간의 주소를 대입해주는 게 맞나요?

이게 맞다면 굳이 그냥 포인터에 주소를 대입해 주는 게 아니라

이중 포인터를 매개변수로 이중 포인터가 가리키는 포인터에 주소를 대입해주는 이유가 뭔가요?

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2024.02.14

안녕하세요, 질문&답변 도우미 Soobak 입니다.


네, 말씀하신 내용이 맞습니다.
이유는 strtol() 함수가 호출된 이후에도 end 포인터가 기리키는 위치를 알 수 있도록 하기 위함입니다.
간단히 예를 들어, char 자료형의 변수의 값을 함수 내부에서 변경하기 위해 char* 포인터를 사용하였던 것 처럼, char* 자료형의 포인터의 값을 변경하기 위해서 char** 이중 포인터를 사용하는 것입니다.

즉, 함수 내부에서 포인터의 값을 변경하기 위해 포인터의 주소(포인터가 가리키는 주소가 아닌, 포인터 변수의 주소)를 전달하는 것입니다.

아 그러니깐 그냥 end를 넘겨주면 포인터 변수의 주소가 아니라 포인터가 가리키는 주소를 넘겨주게 되서 포인터 변수의 값을 바꾸는 게 불가능해지기 때문에 &end를 넘겨주는 거라고 생각해도 될까요? 답변 정말 감사합니다

Soobak님의 프로필

Soobak

2024.02.15

네, 조금 더 정확하게는 '복사' 된 포인터의 주소를 넘겨주게 되면, 변경된 값이 함수의 지역 밖에서 반영되지 않기 때문입니다.

따라서, 변수의 값을 함수 내부에서 변경해주기 위해 변수의 주소를 인수로 전달하는 과정처럼,
함수의 인수로 포인터의 '주소'를 넘겨주는 것입니다.