Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-16 04:51
관리 메뉴

nomad-programmer

[Programming/C] 함수 포인터(Function Pointer) 본문

Programming/C

[Programming/C] 함수 포인터(Function Pointer)

scii 2020. 6. 16. 02:37

함수 포인터(Function Pointer)란 특정 함수를 구성하는 시작 명령의 위치를 가리키는 포인터이다. 함수 포인터를 사용하면 해당하는 함수를 호출하여 실행할 수 있다.

데이터를 가리키는 포인터가 자신이 가리킬 대상의 크기를 명시하듯 함수 포인터는 함수 원형(Function Prototype)을 사용하여 포인터를 선언한다.

더보기

함수 포인터가 함수 원형을 사용하는 이유는 함수 원형을 알아야 함수를 호출할 때 스택 프레임을 구성할 수 있기 때문이다.

* 스택 프레임: 스택을 함수 단위로 구역을 나눠 사용할 수 있도록 C언어에서 제공하는 스택 관리 방식.

 

원형이 같은 함수들 묶기

함수 포인터를 사용하는 가장 큰 이유는 같은 형식의 함수를 그룹으로 묶을 수 있기 때문이다. 

#pragma warning(disable: 4996)

typedef int (*FUNC[4])(int, int);

#include <stdio.h>

int Sum(int a, int b) {
	return a + b;
}

int Sub(int a, int b) {
	return a - b;
}

int Mul(int a, int b) {
	return a * b;
}

int Div(int a, int b) {
	return a / b;
}

int main(void) {
	FUNC func = { &Sum, &Sub, &Mul, &Div };
	char op_table[4] = { '+', '-', '*', '/' };

	for (int i = 0; i < 4; i++) {
		printf("%d %c %d = %d\n", 8, op_table[i], 4, (*func[i])(8, 4));
	}

	return 0;
}

// 결과
/*

8 + 4 = 12
8 - 4 = 4
8 * 4 = 32
8 / 4 = 2

*/
Comments