728x90
반응형
함수 포인터
함수는 전역 스코프에 선언하고, 다른 함수에서 호출해서 사용할 수 있습니다.
이때 함수는 메모리 영역중, code 영역에 함수 정의가 저장됩니다.
이때 함수의 이름은 함수 정의가 있는 메모리의 시작 위치, 즉 주소입니다.
따라서 함수명도 포인터 변수에 넣어서 사용할 수 있는데, 그것이 함수 포인터입니다.
함수 포인터 사용법
#include <stdio.h>
int sum(int x, int y)
{
return x + y;
}
int main()
{
int (*fp)(int, int);
fp = sum;
int res = fp(10, 20);
printf("%d\n", res);
}
함수 포인터의 선언은 좀 복잡하게 생겼습니다.
함수 포인터의 이름이 괄호 안에 들어가있는 형태입니다.
괄호를 제거하면, 주소를 반환하는 함수의 선언이 되므로 주의해야합니다.
함수 포인터를 인자로 주기
#include <stdio.h>
int sum(int x, int y)
{
return x + y;
}
int mean(int a, int b)
{
return (sum(a, b) / 2);
}
int select(int (*func)(int, int))
{
int a, b;
scanf("%d %d", &a, &b);
return func(a, b);
}
int main()
{
int menu;
printf("0 or 1: ");
scanf("%d", &menu);
printf("%d\n", (menu ? select(sum) : select(mean)));
}
select 함수의 인자를 보면 반환형과 인자를 명시한 함수 포인터를 인자로 받고있습니다.
menu의 값에 따라 서로 다른 함수를 넣어 실행하도록 할 수 있습니다.
'언어 > C' 카테고리의 다른 글
[C언어] 배열 요소 접근과 포인터의 관계 (0) | 2022.06.15 |
---|---|
[C언어] 주소에 대한 swap 구현 (0) | 2022.06.13 |
[C언어] Dangling Pointer와 Memory Leak (0) | 2022.06.12 |