C++
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch02-1 : 참조자 기반의 Call-by-reference 구현
미누라니까요
2024. 3. 4. 11:37
728x90
반응형
SMALL
문제 1
참조자를 이용해서 다음 요구사항에 부합하는 함수를 각각 정의하여라.
- 인자로 전달된 int 형 변수의 값을 1씩 증가시키는 함수
- 인자로 전달된 int형 변수의 부호를 바꾸는 함수
그리고 위의 각 함수를 호출하여 그 결과를 확인하는 main함수까지 작성하여라.
정답
#include <iostream>
using namespace std;
void Addone(int *num)
{
*num += 1;
}
void changeSign(int *num)
{
*num *= (-1);
}
int main(void)
{
int num = 20;
Addone(&num);
cout << num << endl;
changeSign(&num);
cout << num << endl;
return 0;
}
결과
문제 2
앞서 소개한 예제 RefSwap.cpp의 SwapByRef2 함수를 다음의 형태로 호출하면 컴파일 에러가 발생한다.
SwapByRef2(23,45);
컴파일 에러가 발생하는 이유가 무엇인지 설명해보자.
RefSwap.cpp
#include <iostream>
using namespace std;
void SwapByRef2(int &ref1, int &ref2)
{
int temp = ref1;
ref1 = ref2;
ref2 = temp;
}
int main(void)
{
int val1 = 10;
int val2 = 20;
SwapByRef2(val1, val2);
cout << "val1 : " << val1 << endl;
cout << "val2 : " << val2 << endl;
return 0;
}
정답 :
컴파일 에러가 나는 이유는 SwapByRef2에서 인수를 받을 때 "참조자"를 사용하였기 때문이다.
참조자를 사용하여 값을 가져오는 경우에는 상수가 아닌 변수를 사용해야한다.
문제 3
문제의 제시에 앞서 먼저 다음 코드를 보자.
int main(void)
{
int num1 = 5;
int *ptr1 = &num1;
int num2 = 10;
int *ptr2 = &num2;
....
}
위의 코드를 보면 ptr1과 ptr2가 각각 num1 과 num2 를 가리키고 있다. 이 때 ptr1과 ptr2를 대상으로 다음과 같이 함수를 호출하고 나면,
SwapPointer(ptr1, ptr2);
ptr1과 ptr2가 가리키는 대상이 서로 바뀌도록 SwapPointer 함수를 정의해 보자.
정답
#include <iostream>
using namespace std;
void SwapPointer(int *(&ptr1), int *(&ptr2))
{
int temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
}
int main(void)
{
int num1 = 5;
int *ptr1 = &num1;
int num2 = 10;
int *ptr2 = &num2;
cout << "(Before Swap) num1 : " << num1 << endl;
cout << "(Before Swap) num2 : " << num2 << endl;
SwapPointer(ptr1, ptr2);
cout << "(After Swap) num1 : " << num1 << endl;
cout << "(After Swap) num2 : " << num2 << endl;
cout << "(After Swap) *ptr1 : " << *ptr1 << endl;
cout << "(After Swap) *ptr2 : " << *ptr2 << endl;
return 0;
}
결과
728x90
반응형
LIST