본문 바로가기
C/공부기록

[C언어] 함수 포인터 작성 방법, 사용 목적, 활용 정리

by Just Do Barro 2021. 11. 3.

[1]함수 포인터란?

함수 포인터는 기존의 주소를 저장하는 변수인 포인터와 비슷하게 함수의 주소를 저장하는 변수입니다. 변수를 선언함과 동시에 메모리에 변수를 위한 공간이 생깁니다. 함수또한 메모리 공간을 차지하기 때문에 주소를 이용하여 함수를 가리킬 수 있습니다. 

함수 포인터 선언 방법

int (*funcPtrOne)(int) = funcPtrTwo;
// 함수의 리턴값 자료형 int, ()안에는 매개변수 자료형만 작성 (매개변수 이름 작성할 필요없음)
// 함수의 이름 작성 시 함수의 주소를 저장하기 때문에 *기호를 왼쪽에 작성

[2]함수 포인터 사용 목적

함수의 매개변수로 일반 자료형 데이터(int, float, double 등)를 전달할 때 데이터의 크기가 크지 않다면 데이터 자체를 함수의 인자로 전달할 수 있지만, 데이터의 크기가 커진다면 해당 데이터의 위치(주소)를 함수의 인자로 전달하여 그 주소를 찾아가게 하는 것이 효율적입니다. 

 

즉, 함수의 포인터도 (예제 funcPtrOne)함수의 매개변수의 자료형과 리턴값의 자료형과 동일한 다른 함수(funcPtrTwo)의 주소를 저장하여, funcPtrOne의 함수를 출력시 funcPtrTwo() 함수를 호출하는 것이 됩니다.

 

funcPtrOne과 동일한 매개변수/리턴값의 자료형을 가진 함수의 주소 모두 저장 가능하며, funcPtrOne의 이름으로 호출될 수 있습니다.

 

[3]함수 포인터 활용

#include <stdio.h>
int funcPtrOne(int arg)
{
return 1;
}
int funcPtrTwo(int arg)
{
return 2;
}
int main(void)
{
int (*funcPtrOne)(int) = funcPtrTwo;
//funcPtrOne은 리턴값이 정수형이며 매개변수 자료형이 정수형이다.
//funcPtrOne은 리턴값과 매개변수 자료형이 정수형인 함수의 주소를 저장할 수 있다.
/*
funcPtrOne에 저장된 함수(funcPtroTwo)주소를 이용해 funcPtrOne(5); 호출하면
funcPtrTwo(5);가 실행된다.
*/
printf("int (*funcPtrOne)(int) = funcPtrTwo; 이후 \n");
printf("funcPtrOne()의 리턴값: %d\n", funcPtrOne(5));
return 0;
}

 

출력결과

 

댓글