채널톡 아이콘

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

남경태님의 프로필 이미지

작성한 질문수 4

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

다중 포인터

이중포인터 강좌 부분 질문있습니다.

작성

·

59

0

char*와 int 의 원본을 수정하는 방식이 다른 이유가 아래와 같은 원리때문인 걸까요?

char*는 문자의 배열(?) 같은 것이고 "Hello" 라는 문자열이 있는 주소를 담는 변수라 한다면 SetMessage는 "Hello"를 담는 바구니의 내용물을 "Bye"로 바꾸는 것이 아니라 따로 "Bye"를 담는 바구니(주소)로 이사하는 방식으로 주소를 바꾸는 것이기 때문에 이중 포인터를 사용하는 것이고

int는 바구니의 내용물을 바꾸는 것이기에 하나의 * 만 필요하다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 남경태님.

질문하신 내용은 포인터와 메모리 관리 개념의 핵심을 잘 짚고 계십니다. char*int의 값 변경 방식은 기본적으로 다른 개념을 이용합니다. 이해를 돕기 위해 관련된 몇 가지 기존 질문과 답변을 기반으로 설명드리겠습니다.

문자 포인터(char*)

  • 문자열 리터럴: char* msg = "Hello"; 와 같은 구문은 문자열 "Hello"가 프로그램의 읽기 전용 데이터 섹션에 저장되고, msg는 이 문자열의 시작 주소를 가리키는 포인터입니다.
  • 주소 변경: 이 포인터가 가리키는 주소를 SetMessage 등의 함수 내에서 바꿀 수 있으며, 이는 "Hello" 대신 "Bye" 등의 다른 문자열 주소를 가리키도록 할 수 있습니다. 이때는 이중 포인터를 사용하여 실제 포인터가 가리키는 주소를 변경할 수 있습니다.

정수 포인터(int*)

  • 변수 자체 변경: int 타입은 단일 값으로, 포인터를 사용하여 직접 그 값을 변경할 수 있습니다. 예를 들어, int x = 5;일 때, int* ptr = &x;로 설정하고 *ptr = 10;으로 값을 변경할 수 있습니다. 이는 직접 변수의 데이터 공간에 접근하여 값을 변경하는 방식으로, 이중 포인터가 필요하지 않습니다.

관련 질문 및 답변 URL

  1. const char **pp관련 질문있습니다. - 문자열에서의 포인터와 주소 변경에 대한 개념이 설명되어 있습니다.
  2. 이중 포인터를 이용한 값 변경 질문입니다. - 이중 포인터를 통해 문자열 주소를 바꾸는 방법을 설명합니다.

이와 같은 차이점 때문에 char*는 문자열 리터럴의 주소를 변경하는 방식으로 다루며, int는 값을 바로 변경할 수 있는 형태로 다루게 됩니다.

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