[1번 문제]
/*
참조자를 이용해서 다음 요구사항에 부합하는 함수를 각각 정의하여라
1.인자로 전달된 int형 변수의 값을 1씩 증가시키는 함수
2.인자로 전달된 int형 변수의 부호를 바꾸는 함수
*/
#include <iostream>
using namespace std;
void add(int &ptr) //참조자를 이용한 함수, 물론 포인터를 이용해도 된다
{
ptr += 1;
}
void reverse(int &ptr)
{
ptr *= -1;
}
int main(void)
{
int num;
cout << "숫자를 입력하세요:";
cin >> num;
cout << "원래 숫자:" << num << endl;
add(num);
cout << "1 증가시킨 숫자:" << num << endl;
reverse(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)
{
//두 참조자 ref1, ref2에 저장된 값의 교환과정이다. 이 교환의 과정은 main 함수에 선언된 변수 val1과 val2의 교환으로 이어진다
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 *pointer = ptr1;
ptr1 = ptr2;
ptr2 = pointer;
}
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;
return 0;
}
개발 환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 열혈 C++ 프로그래밍 윤성우 저
'C++ > 열혈 C++ 프로그래밍(윤성우 저)' 카테고리의 다른 글
열혈 C++ 프로그래밍 2-3 문제 (10) | 2017.05.28 |
---|---|
열혈 C++ 프로그래밍 2-2 문제 (0) | 2017.05.28 |
OOP 단계별 프로젝트 1 (0) | 2017.05.28 |
열혈 C++ 프로그래밍 1-4 문제 (0) | 2017.05.28 |
열혈 C++ 프로그래밍 1-3 문제 (2) | 2017.05.28 |