
[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; }

'C > 공부기록' 카테고리의 다른 글
[C기초 플러스] 구조체 포인터 정리(선언,초기화) (0) | 2021.10.06 |
---|---|
[C언어] const와 포인터 활용 정리 (0) | 2021.09.20 |
[C기초 플러스] strcpy()함수 개념 및 기능 정리 (널 문자 복사) (0) | 2021.09.19 |
댓글