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

구민우님의 프로필 이미지
구민우

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.6 다양한 문자열 함수들

11.6 다양한 문자열함수들 질문 있습니다

작성

·

24

1

11분쯤에 말씀하신 포인터에 다른 것으로 바꿀려는 것이 안 된다는 말은 이해했습니다만 보여준 dest와 source는 배열임에도 불구하고 왜 다른 것으로 선언이 안 되는지 궁금합니다.

답변 2

1

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

 

배열임에도 불구하고 할당이 안되는 이유는 C언어에서 배열의 이름은 해당 '메모리 블록의 시작 주소' 를 나타내는 포인터와 호환이 되는 형태로 다루어지기 때문입니다.

따라서, 배열 이름은 그 자체로 주소를 나타내는 상수이므로, 다른 값을 할당 받을 수 없습니다.
이해하신 포인터 관점에서의 이유와 같은 이유입니다.

 

강의 10.4 포인터와 배열3:16 부분 에서의 배열의 이름과 포인터의 연관성에 관한 교수님의 설명을 잠시 참고해보시면 큰 도움이 되실 것 같습니다.

또한, 추후 섹션 13 에서 메모리 레이아웃, 메모리 동적 할당에 대하여 학습하시고 나면, 이유에 대해서 좀 더 명쾌하게 이해가 되실 것입니다.
다만, 지금은 '배열의 이름은 포인터와 호환이 되는 형태' 이기 때문에 말씀하신 방식의 할당 방식이 불가능하다는 정도로 이해하신 후 학습을 이어나가시는 것을 추천 드립니다.

추가적으로 궁금하신 점이 있으시면 편히 댓글 남겨주세요.

0

안녕하세요, 인프런 AI 인턴입니다. 구민우님, 질문 주셔서 감사합니다.

배열과 포인터는 많은 점에서 유사하게 동작하지만, 배열 이름은 상수 포인터로써 초기 선언 후에는 그 주소를 변경할 수 없습니다.

질문하신 내용은 (강의 10:21) 배열의 이름 dest에 “Start something”을 대입하는 것이 안되는 이유에서 다룬 적이 있습니다. 해당 답변을 통해 더 상세한 설명을 보실 수 있습니다.

간단히 설명드리자면, “dest = \“Start something\”;“와 같은 코드는 허용되지 않습니다. 이는 dest가 이미 배열로 메모리 상에 고정된 주소를 갖고 있기 때문입니다. 따라서 배열 이름 자체에 새로운 주소를 대입할 수 없습니다. 대신, 스트링 복사를 위해서는 strcpy() 같은 함수를 사용하거나 직접 배열 요소를 수정해야 합니다.

배열과 포인터의 차이에 대한 더 많은 이해가 필요하다면, 관련 강의 내용 및 자료를 참고하시면 도움이 될 것입니다.

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

구민우님의 프로필 이미지
구민우

작성한 질문수

질문하기