motivation
-그동안 함수를 호출하려면 함수 이름으로 직접 호출했음.
-그런데 함수를 배열 안에 넣거나, 구조체에 포함하거나, 함수를 또다른 함수의 매개변수로 넘겨주거나, 또다른 함수의 반환값으로 함수를 사용하거나, 그런 일을 할 수는 없을까?
-그런 일들을 하고 싶어서 함수 포인터를 만들었다.
-함수를 저장하는 포인터. 즉, 내가 이해하기에는 '함수의 대변자'이다. 함수를 가지고 이것저것 하고 싶은데, 그게 힘드니 만만한 함수의 대변자를 만들어서 작업을 하겠다는 것이다.
1.먼저, 함수 포인터는 함수를 가리키는 포인터이므로 대상이 되는 함수가 (당연히!) 필요하다.
예를 들어 다음과 같은 함수가 있다.
void hello(){
printf("Hello, world!");
}
반환값자료형(*함수포인터명)();
-함수의 반환값의 형태가 있을 것이다. 그걸 먼저 써 주고, 포인터니까 *를 써 주고, 함수포인터명과 함께 ()로 묶어준다. 그리고 마지막에 빈()를 붙여준다.
예시)
void (*fp)();
함수포인터명=함수명
예시)
fp=hello;
-hello말고도 다른 함수도 저장이 가능하다. 규격만 맞다면, 전구 소켓처럼 갈아끼울 수 있는 것이다.
함수포인터명();
예시)
fp();