Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

주소를 통한 함수 호출로 덧셈과 뺄셈을 동시에 구하는 C++ 프로그램

문제 이해

두 개의 숫자 a와 b가 있다고 가정해 보겠습니다. 이때 (a + b)와 (a - b)를 동시에 계산할 수 있는 함수를 정의해야 합니다.

그런데 C++에서 함수는 기본적으로 최대 하나의 값만 반환할 수 있습니다. 그렇다면 두 개 이상의 결과를 어떻게 함수 밖으로 전달할 수 있을까요?

해답은 포인터(pointer)를 활용한 출력 매개변수(output parameter)입니다. 함수 인자에 포인터를 전달하고, 함수를 호출할 때 해당 변수들의 주소(address)를 넘겨주면 함수 내부에서 원본 변수의 값을 직접 수정할 수 있습니다.

이 문제에서는 다음과 같이 처리합니다.

  • a를 a + b의 값으로 갱신

  • b를 a - b의 값으로 갱신

따라서 함수를 호출할 때는 반드시 두 변수의 주소를 인자로 전달해야 합니다.

예를 들어 입력이 a = 15, b = 18이라면 출력은 다음과 같습니다.

  • a + b = 33

  • a - b = -3

해결 접근 방법

다음 단계를 따라 문제를 해결할 수 있습니다.

  • solve()라는 함수를 정의합니다. 이 함수는 a와 b의 주소를 매개변수로 받습니다.

  • temp 변수에 두 변수 값의 (*a + *b)을 저장합니다.

  • b가 가리키는 변수에 두 변수 값의 (*a - *b)를 저장합니다.

  • a가 가리키는 변수에 temp 값을 대입합니다.

여기서 temp를 먼저 계산하는 것이 중요합니다. *a의 값이 변경되기 전에 합을 미리 저장해 두지 않으면 올바른 결과를 얻을 수 없기 때문입니다.

예제 코드

아래 구현 예시를 통해 더 자세히 이해해 보겠습니다.

#include <iostream>
using namespace std;
int solve(int *a, int *b){
    int temp = *a + *b;
    *b = *a - *b;
    *a = temp;
}
int main(){
    int a = 15, b = 18;
    solve(&a, &b);
    cout << "a + b = " << a << " and a - b = " << b;
}

입력

15, 18

출력

a + b = 33 and a - b = -3

코드 설명

main 함수에서 solve(&a, &b)를 호출하면 변수 a와 b의 메모리 주소가 함수로 전달됩니다. 함수 내부에서 역참조 연산자(*)를 사용해 해당 주소에 저장된 실제 값에 접근하고 수정합니다. 함수가 종료된 후 main 함수의 a에는 33(합), b에는 -3(차)이 저장되어 있으므로, 별도의 return 없이도 두 개의 결과를 동시에 얻을 수 있습니다.