예를들어
int Add(int a, int b)
{
return a+b
}
라는 함수가 있고
int (*fptr)(int, int) = Add;
라는 포인터 변수를 선언했어
그러면 이 fptr이라는 함수포인터가 함수의 주소를 가르키니까
변수 포인터처럼 *fptr(c,d);로 사용해야 직관성이 있는데
왜 fptr(c,d);로 사용하는걸까?
예를들어
int Add(int a, int b)
{
return a+b
}
라는 함수가 있고
int (*fptr)(int, int) = Add;
라는 포인터 변수를 선언했어
그러면 이 fptr이라는 함수포인터가 함수의 주소를 가르키니까
변수 포인터처럼 *fptr(c,d);로 사용해야 직관성이 있는데
왜 fptr(c,d);로 사용하는걸까?
문법
() 자체가 연산자가되서 그럼 ptr() 자체는 이미 함수포인터 ptr이 ()가 붙여서 함수화를 시킨건데 여기에 에스터리스크 * 가 붙어도 의미가없음 오히려 앞에 return 형식의 * 처럼 가르킬수 있어서 더 모호하지
ptr => 함수포인터 *ptr 이가르키는건 함수란 의미인데 함수 문법상 () 이되야함 근데 이걸 네말대로따지면 int *ptr() ?? int*를 리턴하는 함수인가? 가 될수있고 int(*ptr)() 이라고치면 이미 기정의된 함수포인터의 문법과 똑같아진다.
어쩔수없이 함수포인터는 함수의 parameter와 return value를 모두 기입해줘야 해서 문법이 저렇게 지저분할수밖에없음 이거 회피할라교 typedef int (*FUNCPTR)() 등의 typedef형식이 나오게됨 이리하면 변수 처럼 FUNCPTR ptr = func; 처럼 사용할수있다. 이렇게 짠게 tizen 2.4 native에서 구현되있음
OS커널단에서도 이런식으로 쓰이기도하지
가르키니까->가리키니까
nyangduck//되서->돼서
nyangduck//에스터리스크->애스터리스크
nyangduck//가르킬->가리킬
nyangduck//가르키->가리키
nyangduck//되야->돼야
그만써라 ㅠㅠ
nyangduck//되있->돼있
함수포인터는 언어라기 보단 무슨 기호같다. 잘 외워지지도 않고 가끔 써야할 때마다 문법 검색해서 씀
얔한동영상봌는곳 >>
http://zzam.me