와드의 블로그

20. 함수 포인터 본문

프로그래밍 언어/C

20. 함수 포인터

Ward 2021. 9. 18. 02:40

(1) 함수 포인터

 

* 프로세스 메모리 영역에 저장되는 명령

C 언어로 작성한 소스 코드가 컴파일러에 의해 기계어로 번역되면 실행 파일이 된다. 이 실행 파일은 CPU가 처리할 수 있는 기계어 명령문 단위로 이루어진다. 그리고 해등 프로그램이 실행되어 프로세스 형태로 메모리에 저장되면 프로그램의 명령문들은 코드 세그먼트에 옮겨진다. 결국 명령문들도 메모리에 저장되어 있기 때문에 각 명령문마다 주소를 갖는다는 뜻이다.

 

* 함수 포인터란?

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

함수의 주소 값으로 함수 실행하기

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

int (*p)(int, int); //  두 개의 int형 매개변수를 갖고 반환형이 int인 함수 포인터 선언
p = ∑ // Sum 함수의 주소를 함수 포인터 p에 저장

int result = (*p)(2,3); // Sum(2,3)과 같다.

(2) 함수 그룹

 

* 원형이 같은 함수들을 묶기

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

다음과 같이 여러 원형이 같은 함수를 함수 포인터의 배열로 다룰 수 있다.

#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()
{
	int(*p[4])(int, int) = { &Sum, &Sub, &Mul, &Div };
	for (int i = 0; i < 4; i++)
		printf("%d ", (*p[i])(8, 2));

	return 0;
}

 

 

 참조자료: C언어 입문

'프로그래밍 언어 > C' 카테고리의 다른 글

19. 파일 입출력  (0) 2021.09.18
18. 구조체  (0) 2021.09.17
17. 다차원 포인터  (0) 2021.09.17
16. 메모리 할당  (0) 2021.09.17
15. 배열과 포인터  (0) 2021.09.17