반응형
함수 포인터 변수
메모리상에 저장된 함수의 주소 값을 포인터 변수
변수뿐만 아니라 함수들도 바이너리 형태로 메모리 공간에 조장되어 호출 · 실행
배열의 이름과 마찬가지로 함수의 이름도 함수가 저장된 메모리 공간의 주소 값을 의미.
함수 이름의 포인터 형은 함수의 반환형과 매개변수의 선언을 통해서 결정짓도록 약속.
int testFunc(int x){...}
: 반환형(int) / 매개변수(int형 1개)
▷ int(*fptr)(int) = testFunc;
void sampleFunc(int x, int y){...}
: 반환형(void) / 매개변수(int형 2개)
▷ void(*fptr)(int, int) = sampleFunc;
함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언
형태가 같은 서로 다른 기능의 함수를 선택적으로 사용할 수 있습니다.
#include <stdio.h>
int add(int a, int b){
return a + b;
}
int sub(int a, int b){
return a - b;
}
int main(void){
int (*fp)(int, int) = add;
printf("%d\n", fp(10, 3)); // 13
fp = sub;
printf("%d\n", fp(10, 3)); // 7
}
함수 포인터 반환
#include <stdio.h>
int add(int a, int b){
return a + b;
}
int(*process(char *a))(int, int){
printf("%s\n", a);
return add;
}
int main(void){
printf("%d\n", process("10과 20을 더해보겠습니다.")(10, 20));
}
[또 다른 예제]
#include <stdio.h>
int whoIsFirst(int age1, int age2, int (*cmp)(int, int)) {
return cmp(age1, age2);
}
int olderFirst(int age1, int age2) {
return age1 >= age2 ? age1 : age2;
}
int youngerFirst(int age1, int age2) {
return age1 >= age2 ? age2 : age1;
}
int main(void) {
int age1 = 10, age2 = 20, first;
first = whoIsFirst(age1, age2, olderFirst);
printf("%d\n", first); // 20
first = whoIsFirst(age1, age2, youngerFirst);
printf("%d\n", first); // 10
}
반응형
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C] typedef enum 활용 (0) | 2021.09.11 |
---|---|
[C] 로그(log) 함수 (0) | 2021.09.01 |
[C] 포인터의 포인터(이중 포인터) (0) | 2021.03.20 |
[C] 포인터 변수 개념 (0) | 2021.03.20 |
[C] 다차원 배열과 포인터 관계 (0) | 2021.03.20 |
댓글