21.10.20 22:41 작성
·
139
0
포인터는 메모리를 까보면 &pointer 눌러서 확인하면
어떤 메모리주소에 특정 주소가 들어가 있는걸 보수 있잔아요
그런데 저기 reference는 &reference라고 메모리에서 검색하면 자꾸 &number 주소로 가집니다 이게 원래 정상인가요?
이해가 안되는게항목중 하나여서 분명 number 주소따로 있고 reference 주소도 따로 있어야 되는거 같은데 아무리 해도 나오질 않는데 제가 이해한게 맞는지 궁금합니다..... ㅠㅠ
number 의 주소가 0x00001 이라고 가정하면
reference 주소도 0x00001 인것으로 일단 이해 하고 있습니다
아니면
reference 주소는 임의 메모리값 0x00003 인데 이게 가르키는 주소가 0x00001 인지
전자가 맞는지 후자가 맞는지 답변좀 부탁드려요 ㅠㅠ
답변 1
0
2021. 10. 20. 22:46
그건 그때그때 다를 수 있습니다.
참조라는 것은 C++ 단에서 있는 존재이지
사실 어셈블리 레벨로 가면 참조라는 개념은 딱히 존재하지 않습니다.
따라서 우리가 C++ 코드에서 reference를 사용하게 되면,
컴파일 후에는 마치 원래 변수를 사용한것마냥 치환해버려도 된다는 의미입니다.
(위에서 number 주소로 가는 이유도 그런 것)
반면 함수에서 reference를 함수의 인자로 받는 형태로 만들고
실제 함수 호출하는 시점에 breakpoint 걸고 멈춰서 살펴보면,
포인터처럼 주소값이 함수 인자로 들어가 있는 것을 확인할 수 있습니다.
결론 :
참조는 '진퉁' 그 자체를 건드린다는 개념을 위배하지 않는 한 컴파일러가 문법에 맞게 알아서 만들어줍니다.
따라서 일반적으로 말하면, 별도의 메모리를 할당하진 않습니다.
2021. 10. 20. 22:49
감사합니다 메모리 주소값을 보고 싶었는데 c++이 자동으로 알아서 해주고 있었던거라 못보는거였군요 이것때문에 1시간가까이 열심히 뜯고 맛보고 있었습니다 감사합니다 조금더 포인터에 대해 깊이 이해하게 된듯 하네요 ^^