728x90
함수 포인터
함수는 저장된 메모리 공간을 나타내는 주소
지금까지 작성했던 여러 함수들은 사실 모두 포인터였습니다.
우선 예제를 보면서 이해해 보도록 하겠습니다.
int add(int a, int b) {
return a+b;
}
int main() {
int (*operator) (int, int);
operator= add;//저장 가능
//add=~~~ X : 변경 불가능
printf("%d\n",operator(1,2));
}
위와 같이 사용이 가능한데, 정확한 사용법은 다음과 같습니다.
함수 포인터의 자료형은 주소 타입입니다.
함수 포인터는 저장할 함수의 return type과 parameter type, parameter 개수가 동일해야 합니다.
함수의 변경은 불가능합니다.
함수 포인터의 사용 - 매개변수
함수 포인터를 함수의 인자로 전달할 수 있습니다.
#include <stdio.h>
#include <stdlib.h>
enum Operation {ADD = 1, MINUS = 2, DIVIED = 3, MULTIFLY = 4};
int minus(int a, int b) {
return a-b;
}
int divide(int a, int b) {
return a/b;
}
int add(int a, int b) {
return a+b;
}
int multifly(int a, int b) {
return a*b;
}
void caculate (int (*operation) (int, int), int a, int b ){
printf("결과 : %d\n", operation(a, b));
}
int main() {
int input;
printf("원하는 연산을 고르세요 (1: ADD, 2: MINUS, 3: DIVIED, 4:MULTIFLY): ");
scanf("%d", &input);
printf("두 수를 입력하세요\n");
int a,b;
printf("첫뻔째 수를 입력하세요 : ");
scanf("%d", &a);
printf("두번째 수를 입력하세요 : ");
scanf("%d", &b);
switch (input)
{
case ADD:
caculate(add,a,b);
break;
case MINUS:
caculate(minus,a,b);
break;
case DIVIED:
caculate(divide,a,b);
break;
case MULTIFLY:
caculate(multifly,a,b);
break;
default:
break;
}
}
함수 포인터의 사용 - 배열 원소
반환타입 (*변수명[A]) (파라미터1타입, 파라미터2타입, ...)
#include <stdio.h>
enum Operation {ADD = 1, MINUS = 2, DIVIED = 3, MULTIFLY = 4};
int minus(int a, int b) {
return a-b;
}
int divide(int a, int b) {
return a/b;
}
int add(int a, int b) {
return a+b;
}
int multifly(int a, int b) {
return a*b;
}
int main() {
int (*operation[5]) (int, int) = {NULL,add, minus, divide, multifly};
int input;
printf("원하는 연산을 고르세요 (1: ADD, 2: MINUS, 3: DIVIED, 4:MULTIFLY): ");
scanf("%d", &input);
printf("두 수를 입력하세요\n");
int a,b;
printf("첫뻔째 수를 입력하세요 : ");
scanf("%d", &a);
printf("두번째 수를 입력하세요 : ");
scanf("%d", &b);
int result;
switch (input)
{
case ADD:
result = operation[ADD](a, b);
break;
case MINUS:
result = operation[MINUS](a, b);
break;
case DIVIED:
result = operation[DIVIED](a, b);
break;
case MULTIFLY:
result = operation[MULTIFLY](a, b);
break;
default:
break;
}
printf("결과 : %d\n", result);
}
728x90
'c언어' 카테고리의 다른 글
[C언어] 배열 첨자 (0) | 2022.06.16 |
---|---|
[C언어] - Enum (열거형) (0) | 2022.06.15 |
[C언어] - union (0) | 2022.06.12 |
[C언어] - typedef (0) | 2022.06.12 |
[C언어] - 구조체 (Struct) (0) | 2022.06.12 |