일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jupyter lab
- Algorithm
- c#
- Unity
- c# 윈폼
- 다트 언어
- c# 추상 클래스
- git
- 도커
- 플러터
- Flutter
- HTML
- vim
- 포인터
- 구조체
- 깃
- C언어 포인터
- Python
- c# winform
- Data Structure
- gitlab
- github
- C++
- Houdini
- 유니티
- jupyter
- C# delegate
- dart 언어
- docker
- c언어
Archives
- Today
- Total
nomad-programmer
[Programming/C] 함수 포인터(Function Pointer) 본문
함수 포인터(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
*/
'Programming > C' 카테고리의 다른 글
[Programming/C] 공용체 (union) (0) | 2020.06.16 |
---|---|
[Programming/C] 콜백 함수 (0) | 2020.06.16 |
[Programming/C] fseek, ftell 함수 (0) | 2020.06.16 |
[Programming/C] 파일 사용 형식 (0) | 2020.06.16 |
[Programming/C] 구조체 멤버 정렬 (Struct Member Alignment) (0) | 2020.06.14 |
Comments