티스토리 뷰
💥 함수 포인터
- 함수명 앞에 *만 붙여주면 함수 포인터가 선언된다
- 함수 포인터도 포인터이므로 주소값을 저장한다
💥 함수 포인터 사용방법
int (*func)(int a);
자료형 (*함수 포인터 이름)(인자 목록);
💥 함수 포인터 사용이유
직접 함수를 호출하면 되지 왜 복잡하게 함수 포인터를 사용하나? 라는 질문엔 이렇게 대답할 수 있을 것 같다.
메모리의 크기 및 위치가 결정되는 시점은 컴파일 타임 또는 런타임 시점이다.
컴파일 타임 시점에 결정은 정적 바인딩, 런타임 시점의 결정은 동적 바인딩 되었다고 한다.
vs code에서 사용되는 extension 들은 플러그인 방식으로 동작한다.
새로운 기능을 추가하게 되면 매번 다시 컴파일 해야 하는 불편함이 있지만 플러그인 방식을 사용하면 그럴 필요가 없다.
함수 포인터의 사용은 프로그램의 유연한 확장성을 제공하기 때문에 사용한다.
💥 함수 포인터 실습
#include <stdio.h>
int Plus(int a, int b){
return a + b;
}
int Minus(int a, int b){
return a - b;
}
int main()
{
int a = 20;
int b = 10;
int select = 0;
int (*fPtr)(int pa, int pb);
while(1)
{
scanf("%d", &select);
switch(select){
case 1:
fPtr = Plus;
break;
case 2:
fPtr = Minus;
break;
case 3:
return 0;
default:
break;
}
int result = fPtr(a, b);
printf("결과값 : %d\n", result);
}
return 0;
}
이렇게 코드가 짜여있다면, Plus와 Minus의 주소값을 fPtr이라는 포인터에 대입하겠다 라는 뜻이다.
즉, while문에서 case가 1,2,3, default로 나뉘어있는데, scanf 로 select를 받았을 때,
1이면 case 1 을 실행하고, 2이면 case 2를, 3이면 프로그램 종료가 되는 것이다.
그래서 scanf 로 1을 받았다면 Plus 함수가 실행되고, 2는 Minus 함수를 실행하게 된다.
실제로 코드를 실행했을 때도 문제없이 잘 돌아가는 걸 볼 수 있다.
'웹 개발 공부하기' 카테고리의 다른 글
[01.09] 공용체, enum (0) | 2025.01.12 |
---|---|
[01.09] 구조체 (0) | 2025.01.12 |
[01.10] 자바스크립트 말고 타입스크립트🙄 (0) | 2025.01.11 |
[01.08] 가장 이해안되는 포인터💥 (0) | 2025.01.11 |
[01.08] C언어는 처음이지? 2🙄 (0) | 2025.01.08 |