티스토리 뷰

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

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

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

#include <iostream>
using namespace std;

int PlusCount(int &val)
{
	return val + 1;
}

int ChangeMark(int &val)
{
	return (-1) * val;
}

int main()
{
	int num;

	cout << "인자로 전달할 숫자를 입력하세요 : ";
	cin >> num;

	cout << "숫자에 1을 더한 함수 호출 후 : " << PlusCount(num) << endl;
	cout << "숫자 부호를 바꾸는 함수 호출 후 : " << ChangeMark(num) << endl;

	return 0;
}



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


SwapByRef2(23, 45);  // Error


컴파일 에러가 발생하는 이유는?

#include <iostream>
using namespace std;

void SwapByRef2(int &ref1, int &ref2)
{
	int temp = ref1;
	ref1 = ref2;
	ref2 = temp;
}

int main()
{
	int val1 = 10;
	int val2 = 20;

	SwapByRef2(val1, val2);

	cout << "val1 = " << val1 << endl;
	cout << "val2 = " << val2 << endl;

	return 0;
}

=> 레퍼런스가 참조하는 참조 대상은 상수가 아니라 변수여야 함! 



문제 3. 

int main() { 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 &ref1, int &ref2)
{
	int temp;

	temp = ref1;
	ref1 = ref2;
	ref2 = temp;
}

int main()
{
	int num1 = 5;
	int *ptr1 = &num1;
	int num2 = 10;
	int *ptr2 = &num2;

	cout << "SwapPointer 함수 호출 전 *ptr1 = " << *ptr1 << ", *ptr2 = " << *ptr2 << endl;
	SwapPointer(*ptr1, *ptr2);
	cout << "SwapPointer 함수 호출 후 *ptr1 = " << *ptr1 << ", *ptr2 = " << *ptr2 << endl;

	return 0;
}


댓글