함수 포인터
● 함수 포인터의 이해
- 함수는 cpu에 의해 실행이 된다.
> 결국은 메인 메모리 영역에 함수가 있어야 한다.
- 함수이름도 실행시, 의미를 지닌다.
> 메모리에 존재시, 함수이름은 메모리상의 위치를 가리키는 포인터다.
> 결론 : 함수이름은 포인터다
- main함수의 main도 의미를 지닌다.
ex)
int Fuction(int a, int b) {...}
int main(void) {Funtion(10, 20);...}
// Funtion란 이름의 포인터가 가리키는 메모리 공간에 존재하는 메함수를 호출 하라
// 10, 20 란 값을 메모리상에 올린다.
● 함수 타입
- 함수 포인터 : 주소 + 자료형(타입)
- 함수포인터 타입을 결정짓는 요소 : 리턴타입 + 매개 변수 타입
> int fct(int a) ====> int (*fptr)(int);
- (*fptr)는 리턴타입이 int 이고 인자값이 int형인 포인터이다
- fptr : 변수, fct : 상수
- fct(10) : fct 라는 포인터가 가리키는 메모리 공간에 가르키는 함수 호출
- P(10); // 가능
> double fct2(double a, double b) ====> double(*fPtr2)(double, double);
- double (*p)(double, double) 함수를 가리키는 변수
- 차이점 : fct2는 상수, p는 변수
예제 ) ================================================================================
#include <stdio.h>
void Add(int a, int b);
void ChPrint(char* str);
int main(void)
{
char * string = "This is a Function Pointer";
int a = 10;
int b = 20;
//함수포인터 사용
void (*fPtr)(int, int) = Add;
void (*fPtr_1)(char* str) = ChPrint;
fPtr(a, b); // == Add(a, b);
fPtr_1(string); // == ChPrint(str);
/*
printf("%d, %d \n", Add, fPtr1); // 출력결과는 같다.
// 결과적으로 가지는 값은 같다.
// 함수포인터로 초기화 되었기 때문에, 같은 주소값이 출력
*/
return 0;
}
void Add(int a, int b)
{
printf("%d + %d = %d \n", a, b, a+b);
}
void ChPrint(char* str)
{
printf("str = %s \n", str);
}
소스 출저: 열혈강의 C 윤성우
======================================================================================
갑자기 생각난 함수포인터 한번 정리해봄 ㅎ
[출처] 제 18장 함수 포인터와 void 포인터|작성자 초천재
이 글을 공유하기