참조와 배열에 대해서 질문드립니다.!
241
작성한 질문수 1
안녕하세요!
간단한것 같지만 참 아리송한 문제로 긴 삽질 끝에 질문 드립니다 선생님..!
StatInfo& monster_2 = *(monsters + 2);
위의 코드중 '*' 참조 하는 부분이 이해가 잘 되지 않습니다.!
위의 코드는 배열의 3번째 요소를 monster_2 로
사용하고 싶은 목적이라고 생각이 듭니다.!
그러면 StatInfo& monster_2 = (배열의 3번째 요소의 주소)
일텐데. 그러면 참조를 할 필요 없이
배열명은 배열의 시작 주소이기 때문에
monsters + 2는 이미 배열의 3번째 요소의 시작 주소이고
따라서 참조를 하지 않아야 맞는게 아닌가 라는 생각이 절 괴
롭고 미치게 합니다...ㅜ
오히려 참조를 하면 주소 monsters + 2 안에 들어있는 값으
로 이동을 하려 할테고 그러면 세그먼트 오류가 나야 맞다고
생각이 드는데.. 살려주세요 선생님
답변 2
3
ㅎㅎㅎ
그 부분은 누구나 처음 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); 에 가서 데이터를 복사하듯 끄집어 오는 것이죠.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
544
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
445
1
strcpy() 구현 관련 질문
0
516
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
458
1
클래스 타입의 포인터 질문합니다
0
549
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
500
1
템플릿 특수화 관련 질문
0
387
1
포인터 관련 질문합니다!
0
267
1
Unable to start assembler. Check your settings.
0
837
2
cpu선택
0
543
1
포인터 질문이 있습니다
0
327
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
588
1
iterator 삭제관련
0
409
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
313
1
15 분 45초 대 질문
0
312
0
스택 프레임 질문합니다!
2
308
1
오른값 참조 in 게임
0
387
0
동적할당 질문이 있습니다
0
452
1
안녕하세요 메모리에 대해 질문드립니다.
0
308
1
함수객체 의 매개변수
0
363
1
복사생성자
0
438
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
424
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
358
1
스택 오버플로우
2
793
1





