#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int(*getAdd())(int, int)
{
return add;
}
int main()
{
printf("%d\n", getAdd()(10, 20));
return 0;
}
에서 구조가 왜 이렇게 되는지 이해가 잘 안됩니다 .
int(*getAdd())(int, int)
{
return add;
} 에서 (*getAdd())부분이 뭔가요? getAdd뒤에 ()를 붙인 이유를 모르겠습니다 .
Unit 69는 상당히 어려운 개념입니다.
여러 번 반복하거나 나중에 다시 학습하는 것도 좋은 방법입니다.
int* getAdd(int, int)
이렇게 선언하면 int형 인수 2개를 받고, int*로 반환하는 함수입니다.
int를 반환하는 함수 포인터를 선언하고 싶다면
int (*getAdd)(int, int)
형식이 되어야 합니다. 이는 함수 포인터이므로
int func(int, int) 형식인 함수라면 어떤 함수라도 getAdd 함수 포인터에 지정할 수 있습니다.
getAdd 함수 포인터를 사용하면 원하는 함수를 getAdd 함수 포인터에 지정해서 사용할 수 있습니다. 필요에 따라 함수의 동작을 바꿀 수 있습니다.
함수 포인터에는 함수를 지정하지만, 함수가 반환값으로 함수 포인터를 반환하게 하려면 문법적으로 구분이 필요합니다.
int (*getAdd())(int, int)
이런 형식이 됩니다.
정해진 문법 형식입니다. getAdd 뒤에 ()가 왜 붙는가는 모릅니다. 그러나 int*를 반환하는 함수인지, int를 반환하는 함수 포인터인지, 함수 포인터를 반환하는 함수인지를 구별하는 문법은 필요합니다.
위 세 가지 형식을 모두 구분할 수 있어야 합니다.