작성
·
152
0
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
킴주니님께서 질문하신 “이중포인터” 및 “변수의 값을 변경하지 못하는 이유”와 관련하여 간략하게 설명 드리겠습니다. 질문의 핵심은 const char*
타입 변수에 대한 이해와 함수 인자로 문자열 포인터를 넘겼을 때의 동작 방식, 그리고 이중 포인터가 왜 원본을 수정할 수 있는지에 대한 부분입니다.
const char* msg = "hello";
를 선언하고 함수에서 a = "bye";
로 변경하는 부분은 실제로 문자열 "hello"
의 내용을 변경하는 것이 아니라, a
라는 포인터 변수가 가리키는 문자열 주소를 "bye"
의 주소로 변경하는 것입니다. 이때, 원본 msg
가 가리키는 주소는 변경되지 않습니다. const
키워드 때문에 *a = 'x';
와 같이 가리키는 주소의 내용을 변경하는 것은 허용되지 않습니다.
함수 인자로 전달될 때, 포인터 변수는 해당 주소값을 복사하여 전달합니다(call by value
). 따라서 함수 내에서 포인터 변수가 새로운 주소를 가리키게 해도, 이는 함수가 종료되면 더 이상 유효하지 않게 됩니다. 원본 msg
에 영향을 주지 않습니다.
이중 포인터(예: const char**
)를 사용하면 원본 포인터를 변경할 수 있는 이유는 레벨이 하나 더 있는 것과 같습니다. 즉, 이중 포인터를 통해 원본 포인터 자체가 가리키는 주소를 변경할 수 있게 됩니다. 이 경우, 함수에 const char** msgPtr
형태로 포인터의 주소를 전달하면, *msgPtr = "bye";
와 같이 원본 포인터가 새로운 문자열의 주소를 가리키도록 할 수 있습니다.
해당 주제와 직접적으로 연관된 기존 답변을 찾았습니다. 아래 링크는 이중 포인터와 관련된 변화를 설명하는 질문에 대한 답변으로, 원본을 수정할 수 있는 이중 포인터의 동작 방식에 대한 설명을 포함하고 있습니다:
이 링크는 const char*
와 const char**
사용법의 차이와 함수 내에서 이들을 사용했을 때의 동작 방식을 설명하고 있으며, 이중 포인터(const char**
)를 사용함으로써 어떻게 원본 데이터를 변경할 수 있는지 구체적인 코드 예제와 함께 잘 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.