From 5345d33c5c8c462bf712dbf0b729a31706c7410c Mon Sep 17 00:00:00 2001 From: HyeonMoKim0 <109887733+HyeonMoKim0@users.noreply.github.com> Date: Thu, 22 May 2025 12:26:45 +0900 Subject: [PATCH] Update and Create Problem Labs.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 문제(11번 문제)는 함수에 작동되는 call by reference와 call by value에 대한 내용입니다. 개인 공부하는 과정에서 포인터 변수는 call by value이며, "주소값을 복사해서 가져오는 것"이기에 call by reference처럼 보인다는 사실을 알게 되었습니다. 그래서 해당 문제를 만들게 되었고, 다음은 주관적인 해설입니다. - 둘 다 call by reference를 이용한 함수라고 할 수 있지만, 정확히는 아니다. - 포인터 변수를 입력 파라미터로 한 함수는 "주소값을 복사해서 가져오는 것"이기 때문에 call by value라고 봐야 한다. 이 때문에 call by reference가 되는 것처럼 보이는 것이다. - 참조 변수를 입력 파라미터로 한 함수는 말 그대로 값을 가리켜 참조하는 것이기에, call by reference라고 볼 수 있다. --- Function/Labs.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Function/Labs.md b/Function/Labs.md index 38ad6ab..aa1c8e6 100644 --- a/Function/Labs.md +++ b/Function/Labs.md @@ -210,5 +210,34 @@ int main(int argc, char const *argv[]) } ``` +11. 다음 프로그램 코드가 실행해라. 그리고 두 ```increase``` 함수의 차이를 분석하라. + +```c++ +#include +using namespace std; + +void increase(int* x, int* y) { + ++x, ++y; +} + +void increase(int& x, int& y) { + ++x, ++y; +} + +int main(int argc, char const* argv[]) +{ + int x = 10, y = 20; + + cout << "increase 사용 전 : " << x << ", " << y << endl; + + increase(&x, &y); + cout << "참조 매개변수형 increase 사용 후: " << x << ", " << y << endl; + + increase(x, y); + cout << "포인터 매개변수형 increase 사용 후: " << x << ", " << y << endl; + + return 0; +} +```