응애맘마조

Call by value/address/reference 본문

공부/개인

Call by value/address/reference

TH.Wert 2023. 3. 30. 20:42

함수의 호출하는 방법에 대해 알아보겠습니다.

 

Call by value는 값을 인자로 전달하는 함수의 호출방식입니다.

int temp 변수를 추가해서 임시로 저장하는 공간을 만들고 바꾸는 방식입니다. 그렇게 해서 실행하면 됩니다.

하지만 결과는 달라지지 않았습니다. 그 이유는 Swap 함수 안에 있는 num1, num2와 main 함수 안에 있는 num1, num2가 각각 지역변수라서 가지고 있는 주소값이 달라지지 않았기 때문에 Swap 함수를 호출해도 값이 변하지 않습니다.

그래서 사용하는 방법이 Call by reference입니다.


Call by reference는 주소 값을 인자로 전달하는 함수의 호출방식입니다.

*을 붙여 주소값으로 넘기는 방식입니다.

정상적으로 바뀐 값을 볼 수 있습니다.

 

사실 C언어에서는 주소값 자체를 넘기기 때문에 Call by value가 맞습니다.

하지만 주소값이기 때문에 Call by address라고 합니다.

그럼에도 Call by reference라고 하기도 합니다.

 

그 이유는 C++에서 참조자(reference) 기반의 함수 호출과 구분하기 위해서입니다.

&을 사용하여 참조자 기반의 Swap을 만들었습니다.

 

정상적으로 값이 바뀐 것을 확인할 수 있습니다.

 

이번 글은 굉장히 조심스럽습니다. 사람마다 다르게 해석하는 사람도 있고 논란도 많았기 때문입니다.

혹시나 제가 잘못 알고 있거나 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.

읽어주셔서 감사합니다.

'공부 > 개인' 카테고리의 다른 글

상수  (0) 2023.04.05
auto  (0) 2023.03.31
extern  (0) 2023.03.29
static  (0) 2023.03.28
지역변수와 동적할당을 각각 스택과 힙에 할당하는 이유  (0) 2023.03.27
Comments