#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;`은 프로그램이 성공적으로 실행되었음을 나타내며 프로그램을 종료합니다.
이 프로그램은 함수 포인터의 활용 사례를 보여주며, 사용자 정의 연산을 수행하는 유연하고 확장 가능한 방법을 제시합니다. 함수 포인터를 사용함으로써 프로그램의 구조를 더 모듈화하고, 유지 관리를 용이하게 할 수 있습니다.
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 16) 구조체를 선언하고 멤버를 사용하는 방법 (0) | 2024.09.20 |
---|---|
chapter 16) calloc, realloc 함수를 사용한 양수 입력 (0) | 2024.09.19 |
chapter 15) 함수 포인터를 사용한 함수 호출 (0) | 2024.09.17 |
chapter 15) void 포인터 사용 (0) | 2024.09.16 |
chapter 15) 포인터와 이중 포인터의 관계 (0) | 2024.09.15 |