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

Pass님의 프로필 이미지
Pass

작성한 질문수

독하게 되새기는 C 프로그래밍

매개변수 전달 기법 - 두 번째

함수 호출 매개변수 전달에 대한 질문 드립니다.

해결된 질문

작성

·

70

0

함수 호출 매개변수 전달에 대한 질문 드립니다.call by reference 와 call by address 의 차이는 참조형의 경우에 실제 int a; 메모리 주소: 0x01int& ra=a; 메모리 주소:0x01int* pa=&a; 메모리 주소:0x~~ (ra와 a는 같음 하지만 포인터는 주소를 담는 변수이기 때문에 저장공간을 주소값으로 가짐)제가 이해한 것은 저 a 를 참조형과 포인터형으로 함수를 호출 했을 때실제 함수에 포인터로 받은 매개변수는 지역변수 선언하여 해당 포인터에 주소값이 들어있고,참조형으로 받은 함수에서는 매개변수가 따로 생성되지 않고, 호출자에 있던 a값의 주소와 피호출자의 int& a 의 주소값이 일치했습니다. 결과적으로 참조형은 스택공간에 변수를 따로 생성하지 않고, 호출자의 스택공간의 주소를 공유한다고 생각이 들어서 이 부분에서 차이가 있다고 생각이 들어서 제가 이해한것이 맞는지 궁금하여 질문 드렸습니다. 감사합니다.

답변 1

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

컴퓨터 H/W 구조에 '참조'라는 개념은 존재하지 않습니다. 고급어에만 존재하는 것입니다. 그리고 이 '참조라는 개념'을 C언어는 포인터로 구현하고 C++는 참조자로 구현합니다. 둘 중 무엇이든 결국 기계어로 번역하면 포인터를 이용한 경우와 크게 다르지 않습니다.

C++의 참조자도 결국 필요에 따라 포인터처럼 메모리 공간을 차지합니다. 다만 문법적으로 그 공간에 접근하지 못할 뿐입니다.

또한 상수형 참조가 적용될 경우 기계어로 번역하는 과정에서 최적화 논리가 적용됩니다. 경우에 따라서는 참조형이 포인터와 달리 애초 메모리 공간을 가지지 않을 수도 있습니다. 그러니 주소를 공유하거나 등의 이슈로 생각할 것이 아니라 '최적화' 관점에서 판단하는 것이 더 적절하겠습니다. 참고하시기 바랍니다. 😄

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

자세한 설명 감사합니다! 바로 이해했습니다

제가 질문을 급하게 작성했기에 수정하려고 하는 찰나

... 좋지 못한 글을 바로 이해 하시고 답변을 주셔서 놀랬습니다 ㅎㅎ 공부할 수록 더 흥미가 생기고 재밌는 강의 열공하겠습니다!

Pass님의 프로필 이미지
Pass

작성한 질문수

질문하기