Pink Transparent Star

C++언어/개념 공부

[ 열혈 c++ 프로그래밍 ] Part2 - 1

채유나 2022. 9. 1. 17:45
728x90

[ 참조자 기반의 Call-by-reference 구현 ] 

더보기

01. 참조자를 이용해서 다음 요구사항에 부합하는 함수를 각각 정의하여라.

1. 인자로 전달된 int형 변수의 값을 1씩 증가시키는 함수

2. 인자로 전달된 int형 변수의 부호를 바꾸는 함수

 

그리고 위의 각 함수를 호출하여 그 결과를 확인하는 main 함수까지 작성하여라.

 

#include <iostream>

using namespace std;

void AddNumber(int& ref1, int& ref2);
void ChangeNumber(int& ptr1, int& ptr2);

int main(void)
{
	int num1 = 10;
	int num2 = 20;
	int num3 = -30;
	int num4 = 40;

	AddNumber(num1, num2);
	ChangeNumber(num3, num4);
	cout << "num1 :" << num1 << endl;
	cout << "num2 :" << num2 << endl;
	cout << "num3 :" << num3 << endl;
	cout << "num4 :" << num4 << endl;
}

void AddNumber(int& ref1, int& ref2)
{
	ref1++;
	ref2++;
}

void ChangeNumber(int& ptr1, int& ptr2)
{
	ptr1*= -1;
	ptr2*= -1;
}
02-1 문제1

 

더보기

02. 앞서 소개한 예제 RefSwap.cpp의 SwapByRef2 함수를 다음의 형태로 호출하면 컴파일에러가 발생한다.

SwapByRef2(23, 45);

 

컴파일 에러가 발생하는 이유가 무엇인지 설명해보자.

 

SwapByRef2의 매개변수로 참조자를 받고있다. 참조자의 경우 상수 값으로 선언하는 것이 아닌 변수로 선언해서 해당 변수를 참조해야하기 때문에 컴파일 오류가 난다[?]

 

더보기

03.문제의 제시에 앞서 먼저 다음 코드를 보자.

 

위의 코드를 보면 ptr1과 ptr2가 각각 num1과 num2를 가르키고 있다. 이때 ptr1과 ptr2를 대상으로 다음과 같이 함수를 호출하고 나면, SwapPointer(ptr1, ptr2);

 

ptr1과 ptr2가 가르키는 대상이 서로 바뀌도록 SwapPointer 함수를 정의해 보자.

 

#include <iostream>

using namespace std;

void SwapPointer(int* (&ref1), int* (&ref2));


int main(void)
{
	int num1 = 5;
	int *ptr1 = &num1;
	int num2 = 10;
	int *ptr2 = &num2;
	cout << "ptr1 :" << *ptr1 << endl;
	cout << "ptr2 :" << *ptr2 << endl;

	SwapPointer(ptr1, ptr2);
	cout << "ptr1 :" << *ptr1 << endl;
	cout << "ptr2 :" << *ptr2 << endl;
}

void SwapPointer(int* (&ref1), int* (&ref2))
{

	int* temp = ref1;
	ref1 = ref2;
	ref2 = temp;
}
02-1 문제3
728x90