개요
이 글에서는 두 개의 값을 입력받아 서로 비교한 뒤, 더 큰 값의 메모리 주소를 반환하는 함수 포인터를 구현하는 방법을 알아봅니다. 함수 포인터는 상황에 따라 서로 다른 함수의 주소를 전달할 수 있게 해 주므로 코드의 유연성과 추상화 수준을 높여 줍니다. 또한 실행 시간(runtime)의 값에 따라 실행할 함수를 간단하게 선택할 수 있어, 복잡한 조건문 없이도 코드를 깔끔하게 단순화할 수 있습니다.
big() 함수의 동작 원리
프로그램은 두 개의 정수를 참조(reference) 형태로 big() 함수에 전달합니다. big() 함수는 전달받은 두 정수 값을 비교한 후, 더 큰 값이 저장된 메모리 주소를 반환합니다. 반환값은 정수형 포인터이며, 호출부에서는 이 포인터를 역참조하여 더 큰 값을 출력할 수 있습니다.
예시
- 입력: 7 13 → 출력: 더 큰 값은 13입니다.
- 입력: 8 6 → 출력: 더 큰 값은 8입니다.
설명: 두 개의 정수 값을 비교한 뒤, 포인터가 두 값 중 더 큰 값의 메모리 주소를 반환하여 결과를 출력합니다.
구현 접근 방법
- 정수형 포인터(예: int *c)를 선언합니다.
- 두 개의 정수 변수를 초기화합니다.
- 두 값을 입력받습니다.
- 주어진 두 값을 비교합니다.
- 마지막으로 포인터 *c가 더 큰 값의 주소를 반환하도록 합니다.
알고리즘
시작
STEP 1 → 함수를 생성하고 인수를 전달합니다.
int *big(int &, int &)
종료
STEP 2 → main() 함수에서 두 값을 입력·출력하고 포인터 *c를 초기화합니다.
int a, b, *c
c = big(a, b) 호출
c 출력
종료
STEP 3 → 전달된 두 정수 값을 비교하고, 포인터 c를 통해 더 큰 값의 메모리 주소를 반환합니다.
if(x > y)
return(&x)
else
return(&y)
종료
정지
예제 코드
#include <iostream>
using namespace std;
int *big(int &x, int &y);
int main() {
int a = 4, b = 7;
int *c;
c = big(a, b);
cout << "더 큰 값은 " << *c << "\n";
return 0;
}
int *big(int &x, int &y) {
if (x > y)
return (&x);
else
return (&y);
}
실행 결과
위 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
더 큰 값은 7
입력되는 두 값에 따라 비교 결과가 달라지며, 항상 더 큰 값의 메모리 주소가 포인터를 통해 반환됩니다. 이처럼 함수 포인터와 참조 전달을 함께 활용하면, 값을 복사하지 않으면서도 효율적으로 비교 연산을 수행할 수 있습니다.