함수포인터
반환형 (*포인터이름)(매개변수 목록);
- 다른 함수의 주소를 저장할 수 있는 포인터
- 함수 포인터와 저장될 함수의 반환값 자료형, 매개변수 자료형과 개수가 일치해야 한다.
예시
#include <stdio.h>
#include <stdint.h>
uint8_t addOne(uint8_t value) {
return value + 1;
}
int main() {
typedef uint8_t (*FP_uint8_t_uint8_t)(uint8_t);
FP_uint8_t_uint8_t myFunctionPointer = addOne;
uint8_t result = myFunctionPointer(5);
printf("Result: %u\n", result);
return 0;
}
(연습) 사칙연산 실습
1. Subtract / multiply / divide 함수를 선언
2. 두개의 정수와, 연산자를 입력 받음
3. 함수 포인터를 사용하여 연산을 수행
4. 그 결과를 출력
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
//subtract 함수 선언
int subtract(int a, int b){
return a-b;
}
//multiply 함수 선언
int multiply(int a, int b){
return a*b;
}
//divide 함수 선언
int divide(int a, int b){
return a/b;
}
int main() {
int (*operation)(int, int); // 함수 포인터 선언
int num1, num2;
char operator;
printf("두 정수를 입력하세요: ");
scanf("%d %d", &num1, &num2);
printf("연산자를 선택하세요 (+, -, *, /): ");
scanf(" %c", &operator);
switch (operator)
{
case '+':
operation = add;
break;
case '-':
operation = subtract;
break;
case '*':
operation = multiply;
break;
case '/':
operation = divide;
break;
default:
printf("올바르지 않은 입력값입니다.\n");
break;
}
int result = operation(num1, num2);
printf("결과: %d\n", result);
return 0;
}
왜 쓰일까?
- 콜백(call back) 매커니즘을 구현할 때, 함수를 또 다른 함수의 인자로 넘겨주기 위해
- 여러 개의 함수를 배열로 관리하고자 할 때
'IVS > C 프로그래밍' 카테고리의 다른 글
[C] 로또 추첨 예제 (1) | 2025.01.13 |
---|---|
[C] 매크로(macro) 함수, 조건부 컴파일 (0) | 2025.01.13 |
[C] 공용체(union), 열거체(enum) (0) | 2025.01.13 |
[C] 지역변수(local), 전역변수(global), 정적변수(static) (0) | 2025.01.13 |
[C] 구조체 - 바이트 패딩(Byte Padding) (0) | 2025.01.13 |