심사문제에서 원하는 바는 이해를 했는데
도대체 왜 executer함수 호출에 fp, p를 사용할수있는건가요?
void executer(void(*fp[])(struct Person*), struct Person p[], int count)
{
for (int i = 0; i < count; i++)
{
fp[i](&p[i]);
}
} 이게 정의된 함수이고
executer(fp, p, sizeof(p) / sizeof(struct Person));
이게 함수를 호출할때 사용하는건데..
문제에서의 함수 포인터 선언들은 전부 함수 배열 포인터인데
어떻게 fp와 p로 호출할수있는건가요?
executer 함수의 인자가 2개인데, 그 인자의 이름이 fp, p이니까 함수 안에서 사용할 수 있습니다.
fp는 함수 포인터이니 함수를 인자로 받는다는 뜻인데, 함수의 주소를 받아서 해당 함수를 호출할 수 있죠. 함수 자체를 인자로 받아서 함수 내부에서 호출하는 용도로 쓰는 게 함수 포인터입니다.
아 그러면
executer(fp, p, sizeof(p) / sizeof(struct Person));
으로 호출할수 있는 이유는
void executer(void(*fp[])(struct Person*), struct Person p[]. int count)
에서 매개변수인 함수 포인터에
메인함수에서 선언했던 함수 배열 포인터의 '이름'인 fp만을 집어넣어
(배열의 이름은 첫번째 요소의 주소를 담고있기때문에)
fp[0]의 주소를 받아온뒤 executer함수에서 반복문을 사용하여
추가로 fp[1], fp[2]를 반환하는 건가요?
p도 마찬가지로 구조체 배열의 이름인거구요?