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

Ya0ng님의 프로필 이미지
Ya0ng

작성한 질문수

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

배열 기초

참조와 배열에 대해서 질문드립니다.!

작성

·

199

0

안녕하세요!

간단한것 같지만 참 아리송한 문제로 긴 삽질 끝에 질문 드립니다 선생님..!

StatInfo& monster_2 = *(monsters + 2);

위의 코드중 '*' 참조 하는 부분이 이해가 잘 되지 않습니다.!

위의 코드는 배열의 3번째 요소를 monster_2 로

사용하고 싶은 목적이라고 생각이 듭니다.!

그러면 StatInfo& monster_2 = (배열의 3번째 요소의 주소)

일텐데. 그러면 참조를 할 필요 없이

배열명은 배열의 시작 주소이기 때문에 

monsters + 2는 이미 배열의 3번째 요소의 시작 주소이고

따라서 참조를 하지 않아야 맞는게 아닌가 라는 생각이 절 괴

롭고 미치게 합니다...ㅜ

오히려 참조를 하면 주소 monsters + 2 안에 들어있는 값으

로 이동을 하려 할테고 그러면 세그먼트 오류가 나야 맞다고

생각이 드는데.. 살려주세요 선생님

답변 2

3

Rookiss님의 프로필 이미지
Rookiss
지식공유자

ㅎㅎㅎ
그 부분은 누구나 처음 C++ 공부할 때 뇌정지가 오는 부분입니다.
저도 고민 많이 했던 기억이 새록 떠오르네요.

StatInfo& monster_2 = *(monsters + 2);

말씀주신대로 위에서 참조값은 내부적으로는 주소값으로 동작하고,
그렇다면 (monsters + 2)가 해당 주소이니
StatInfo& monster_2 = (monsters + 2);

이게 맞지 않을까! 싶긴 한데요.
물론 참조의 내부 작동 원리는 그렇긴 하지만,
C++ 관점에서 그런 부분은 숨겨져 있고
겉으로 보기엔 '별칭'을 붙이는 쪽에 가깝습니다.
따라서 
[StatInfo& 에 뭔가를 저장할 때는
StatInfo 에 뭔가를 복사할 때와 100% 똑같은 문법으로 작성한다!
단 내부적으로 포인터처럼 주소값으로 작동한다!]
라고 기억을 하면 헷갈리지 않습니다.

StatInfo*와 같은 포인터 변수였다면 (monsters + 2) 로 저장하는게 맞지만,
StatInfo&와 같은 참조(&) 변수는 사실상
StatInfo 변수에 복사하는 것마냥 문법을 만들어주면 되니
StatInfo temp = *(monsters + 2); 에 가서 데이터를 복사하듯 끄집어 오는 것이죠.

0

Ya0ng님의 프로필 이미지
Ya0ng
질문자

흐규규구.. 선생님 이해했어요 너무 감사합니다.

이렇게 좋은 강의 만들어주셔서 정말 감사합니다 :) bb

Ya0ng님의 프로필 이미지
Ya0ng

작성한 질문수

질문하기