Minwoo Dev.

[C++] 윤성우의 열혈 C++ 프로그래밍 Ch02-1 : 참조자 기반의 Call-by-reference 구현 본문

C++

[C++] 윤성우의 열혈 C++ 프로그래밍 Ch02-1 : 참조자 기반의 Call-by-reference 구현

itisminu 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