1. 함수 포인터 배열
-
정의: 정수 포인터 배열은 정수 포인터를 저장하는 배열입니다. 문자 포인터 배열은 문자 포인터를 저장하는 배열입니다. 함수 포인터 배열은 함수 포인터를 저장하는 배열입니다.
-
예제:
#include <stdio.h>
int add(int x, int y) {
return x + y;
}
int sub(int x, int y) {
return x - y;
}
int mul(int x, int y) {
return x * y;
}
int div(int x, int y) {
return x / y;
}
int main() {
int(*pFun1)(int, int) = add; // 함수 포인터
int(*pFun2)(int, int) = sub;
int(*pFun3)(int, int) = mul;
int(*pFun4)(int, int) = div;
printf("%d\n", pFun1(2, 4));
printf("%d\n", pFun2(2, 4));
printf("%d\n", pFun3(2, 4));
printf("%d\n", pFun4(2, 4));
return 0;
}
여기서 함수 포인터의 유형이 모두 같음을 알 수 있습니다. 따라서 함수 포인터 배열을 사용하여 코드를 간소화할 수 있습니다.
#include <stdio.h>
int add(int x, int y) {
return x + y;
}
int sub(int x, int y) {
return x - y;
}
int mul(int x, int y) {
return x * y;
}
int div(int x, int y) {
return x / y;
}
int main() {
int i;
int(*pFunArr[4])(int, int) = { add, sub, mul, div }; // 함수 포인터 배열
for (i = 0; i < 4; i++) {
int result = pFunArr[i](2, 4);
printf("%d\n", result);
}
return 0;
}
2. 전환 표
계산기의 일반적인 구현 방법:
#include <stdio.h>
int add(int x, int y) {
return x + y;
}
int sub(int x, int y) {
return x - y;
}
int mul(int x, int y) {
return x * y;
}
int div(int x, int y) {
return x / y;
}
int main() {
int x, y;
int input, result;
do {
printf("***************************\n");
printf("******1.추가 2.빼기******\n");
printf("******3.곱하기 4.나누기******\n");
printf("******0.종료 ******\n");
printf("***************************\n");
scanf("%d", &input);
switch (input) {
case 1:
printf("두개의 연산자 값을 입력하세요: \n");
scanf("%d %d", &x, &y);
result = add(x, y);
printf("%d\n", result);
break;
case 2:
printf("두개의 연산자 값을 입력하세요: \n");
scanf("%d %d", &x, &y);
result = sub(x, y);
printf("%d\n", result);
break;
case 3:
printf("두개의 연산자 값을 입력하세요: \n");
scanf("%d %d", &x, &y);
result = mul(x, y);
printf("%d\n", result);
break;
case 4:
printf("두개의 연산자 값을 입력하세요: \n");
scanf("%d %d", &x, &y);
result = div(x, y);
printf("%d\n", result);
break;
case 0:
printf("프로그램을 종료합니다.\n");
break;
default:
printf("잘못된 선택입니다.\n");
break;
}
} while (input);
return 0;
}
개선된 버전:
#include <stdio.h>
int add(int x, int y) {
return x + y;
}
int sub(int x, int y) {
return x - y;
}
int mul(int x, int y) {
return x * y;
}
int div(int x, int y) {
return x / y;
}
int main() {
int x, y;
int input = 1, result;
int(*pFunArr[5])(int, int) = { 0, add, sub, mul, div }; // 함수 포인터 배열
do {
printf("***************************\n");
printf("******1.추가 2.빼기******\n");
printf("******3.곱하기 4.나누기******\n");
printf("******0.종료 ******\n");
printf("***************************\n");
scanf("%d", &input);
printf("연산자 값을 입력하세요: \n");
scanf("%d %d", &x, &y);
if (input == 1 || input == 2 || input == 3 || input == 4) {
result = (*pFunArr[input])(x, y);
printf("%d\n", result);
} else if (input == 0) {
printf("프로그램을 종료합니다.\n");
} else {
printf("잘못된 선택입니다.\n");
}
} while (input);
return 0;
}
결론: 동일 유형의 함수를 여러 번 호출할 때 함수 포인터 배열을 사용하면 코드를 간소화할 수 있습니다!
이 기사는 여기에서 끝납니다.