본문 바로가기
개념/혼자 공부하는 C언어

chapter 15) 함수 포인터로 원하는 함수를 호출하는 방법

by kiseno 2024. 9. 18.
728x90
반응형
SMALL
#include <stdio.h>

void func(int (*fp)(int, int));
int sum(int a, int b);
int mul(int a, int b);
int max(int a, int b);

int main(void){
    int set;

    printf("01 two integer sum\n");
    printf("02 two integer mul\n");
    printf("03 which one does high value of two integer?\n");
    printf("what want you do calculator : ");
    scanf("%d", &set);

    switch(set){
        case 1 : func(sum); break;
        case 2 : func(mul); break;
        case 3 : func(max); break;
    }
    return 0;
}

void func(int (*fp)(int, int)){
    int a,b;
    int res;

    printf("input two integer : ");
    scanf("%d%d", &a, &b);
    res = fp(a,b);
    printf("result : %d\n", res);
}

int sum(int a, int b){
    return (a+b);
}

int mul(int a, int b){
    return (a * b);
}

int max(int a, int b){
    if (a > b) return a;
    else return b;
}

### 코드 설명

이 프로그램은 사용자로부터 선택을 입력 받아 해당하는 연산(덧셈, 곱셈, 두 정수 중 더 큰 값 찾기)을 수행하는 예제입니다. 각 연산은 별도의 함수로 구현되어 있으며, 함수 포인터를 통해 해당 함수를 호출하는 구조를 가지고 있습니다.

### 주요 구성 요소

- **함수 선언**:
  - `int sum(int a, int b);`는 두 정수의 합을 반환합니다.
  - `int mul(int a, int b);`는 두 정수의 곱을 반환합니다.
  - `int max(int a, int b);`는 두 정수 중 더 큰 값을 반환합니다.

- **`func` 함수**:
  - `void func(int (*fp)(int, int));`는 함수 포인터를 매개변수로 받아, 사용자로부터 두 정수를 입력 받고 해당 함수 포인터(`fp`)를 통해 연산을 수행한 후 결과를 출력합니다.

- **`main` 함수**:
  - 사용자로부터 원하는 연산의 번호를 입력 받습니다.
  - `switch` 문을 사용하여 사용자의 선택에 따라 `func` 함수에 적절한 함수 포인터(`sum`, `mul`, `max`)를 전달합니다.

### 작동 방식

1. 프로그램이 실행되면, 사용자에게 수행하고 싶은 연산의 번호를 입력 받습니다.
2. 사용자가 선택한 번호에 따라, `switch` 문이 해당 연산을 수행하는 함수(`sum`, `mul`, `max`)의 포인터를 `func` 함수에 전달합니다.
3. `func` 함수는 사용자로부터 두 정수를 입력 받고, 전달받은 함수 포인터를 사용하여 해당 연산을 수행합니다. 연산 결과는 `printf`를 통해 출력됩니다.

### 예시 입력 및 출력

- 사용자가 "1"을 선택하고 두 정수 "5"와 "3"을 입력한 경우:
  ```
  result : 8
  ```
- 사용자가 "2"을 선택하고 두 정수 "4"와 "6"을 입력한 경우:
  ```
  result : 24
  ```
- 사용자가 "3"을 선택하고 두 정수 "7"와 "10"을 입력한 경우:
  ```
  result : 10
  ```

### 프로그램 종료

- `return 0;`은 프로그램이 성공적으로 실행되었음을 나타내며 프로그램을 종료합니다.

이 프로그램은 함수 포인터의 활용 사례를 보여주며, 사용자 정의 연산을 수행하는 유연하고 확장 가능한 방법을 제시합니다. 함수 포인터를 사용함으로써 프로그램의 구조를 더 모듈화하고, 유지 관리를 용이하게 할 수 있습니다.

728x90
반응형
LIST