인프런 커뮤니티 질문&답변

킴주니님의 프로필 이미지
킴주니

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

다중 포인터

이중포인터 질문

작성

·

152

0

처음 const char* msg = "hello";를 선언하고Setmassge(msg)실행해서Setmassage(const char* a){ a = "bye"; }이 코드가 "bye"로 바뀌지 않는 이유가 const타입이라서 *a 를 사용할 수 없어서 바뀌지 않는 건가요? 그래서 a = "bye"라는 문법을 사용한거고 근데 이 문법은 인자로 받은 msg(hello)를 원본을 건드리는게 아닌 대입하는 식이어서 bye의 주소를 대입만하고프로그램이 종료되니 아무 쓸모가 없는게 맞나요? 만약 맞다 하면 이중 포인터도 const 타입인데 어떻게 *a를 사용할수 있는건지 궁금합니다(원본을 건듬) 잘이해가 가지않네요 ㅠㅠ   

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

킴주니님께서 질문하신 “이중포인터” 및 “변수의 값을 변경하지 못하는 이유”와 관련하여 간략하게 설명 드리겠습니다. 질문의 핵심은 const char* 타입 변수에 대한 이해와 함수 인자로 문자열 포인터를 넘겼을 때의 동작 방식, 그리고 이중 포인터가 왜 원본을 수정할 수 있는지에 대한 부분입니다.

  1. const char* msg = "hello";를 선언하고 함수에서 a = "bye";로 변경하는 부분은 실제로 문자열 "hello"의 내용을 변경하는 것이 아니라, a라는 포인터 변수가 가리키는 문자열 주소를 "bye"의 주소로 변경하는 것입니다. 이때, 원본 msg가 가리키는 주소는 변경되지 않습니다. const 키워드 때문에 *a = 'x';와 같이 가리키는 주소의 내용을 변경하는 것은 허용되지 않습니다.

  2. 함수 인자로 전달될 때, 포인터 변수는 해당 주소값을 복사하여 전달합니다(call by value). 따라서 함수 내에서 포인터 변수가 새로운 주소를 가리키게 해도, 이는 함수가 종료되면 더 이상 유효하지 않게 됩니다. 원본 msg에 영향을 주지 않습니다.

  3. 이중 포인터(예: const char**)를 사용하면 원본 포인터를 변경할 수 있는 이유는 레벨이 하나 더 있는 것과 같습니다. 즉, 이중 포인터를 통해 원본 포인터 자체가 가리키는 주소를 변경할 수 있게 됩니다. 이 경우, 함수에 const char** msgPtr 형태로 포인터의 주소를 전달하면, *msgPtr = "bye";와 같이 원본 포인터가 새로운 문자열의 주소를 가리키도록 할 수 있습니다.

해당 주제와 직접적으로 연관된 기존 답변을 찾았습니다. 아래 링크는 이중 포인터와 관련된 변화를 설명하는 질문에 대한 답변으로, 원본을 수정할 수 있는 이중 포인터의 동작 방식에 대한 설명을 포함하고 있습니다:

이 링크는 const char*const char** 사용법의 차이와 함수 내에서 이들을 사용했을 때의 동작 방식을 설명하고 있으며, 이중 포인터(const char**)를 사용함으로써 어떻게 원본 데이터를 변경할 수 있는지 구체적인 코드 예제와 함께 잘 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

킴주니님의 프로필 이미지
킴주니

작성한 질문수

질문하기