함수 인자를 전달하는 방법
함수 인자를 전달하는 방법은 3가지가 존재합니다.
- call by value (인수값을 복사하고 복사본을 전달합니다.)
- call by pointer (인자의 주소를 전달합니다.)
- call by reference ( 인자의 참조를 전달합니다.)
Call by value
기본적으로 call by value는 인수값을 복사하고 복사본을 전달합니다.
호출자의 값은 호출 수신자의 변경사항에 반영되지 않습니다.
암시적(implicitly)으로 인수의 복사 생성자를 호출합니다.
다음 아래의 예시코드를 보겠습니다.
call by value로 불러오면 함수 내에서 값이 증가하지만
함수를 통과한 후에는 다시 x의 값이 그대로인것을 확인할 수 있습니다.
Call by pointer
call by pointer의 경우 인자의 주소를 전달합니다.
호출자의 값은 호출 수신자의 변경 사항에 반영됩니다.
NULL 포인터를 인수로 전달할 수 있습니다.
call by value 보다 간단하고 속도도 빠릅니다.
다음의 예시코드를 보겠습니다.
위의 코드를 보면 x의 결과값이 변한 것을 알 수 있습니다.
이 개념을 이해하려면 포인터를 이해하는 것이 굉장히 중요합니다.
Add3(&x)를 통해 x의 주소에 들어값니다.
그다음 함수를 통해 x의 주소안 값을 3 증가시키게 되는데요.
그러면 이제 x에는 4가 저장되게 됩니다.
Call by reference
call by reference의 경우 인자의 참조를 전달합니다.
호출자의 값은 호출 수신자의 변경 사항에 전달됩니다.
NULL 전달은 허용하지 않습니다.
call by value보다 빠르고 간단합니다.
다음은 예시코드입니다.
call by reference의 경우 직접 주소에 들어가서 값을 변환시킨다고 이해하면 편할 것 같습니다.
함수를 보면 직접 주소에 들어가서 주소 안의 값을 변형시키는 것을 확인할 수 있습니다.
그렇기 때문에 출력이 4가 나오는것을 확인할 수 있습니다.
'C++' 카테고리의 다른 글
[C++] 함수 오버로딩(Function overloading) (0) | 2023.10.29 |
---|---|
[C++] 얕은 복사(Shallow copy) VS 깊은 복사(Deep copy) (0) | 2023.10.29 |
[C++] LHS변수와 RHS변수/const 활용(pointer const etc..) (1) | 2023.10.28 |
[C++] 네임스페이스(Namespace)를 사용하는 이유 (0) | 2023.10.28 |
[C++] 클래스 안에서의 명명 규칙 (0) | 2023.10.27 |
댓글