#include < stdio.h>
// 테스트 함수
void func()
{
printf(" function pointer call \\n");
}
// 함수 포인터 호출 함수
void test_call(void* v)
{
// 특수하게 인수가 함수의 주소로 가정하고 강제로 캐스팅 후 호출.
((void (*)())v)(); //__asm { call v }
}
int main(int, char**)
{
int v=0x1234;
int (*p); // 포인터
int (**pp); // 이중 포인터
p = &v;
pp = &p;
printf("address: ------------------------------- \\n");
printf(" val: 0x%X \\n", v);
printf(" add: 0x%X \\n", &v);
printf("포이터 참조(&), 역참조(*): ------------ \\n");
printf(" *p: 0x%X \\n", *p);
printf(" p: 0x%X \\n", p);
printf(" &p: 0x%X \\n", &p);
printf(" *&p: 0x%X \\n", *&p);
printf(" **&p: 0x%X \\n", **&p);
printf("이중 포이터 참조(&), 역참조(*): ------- \\n");
printf(" **pp: 0x%X \\n", **pp);
printf(" *pp: 0x%X \\n", *pp);
printf(" pp: 0x%X \\n", pp);
printf(" &pp: 0x%X \\n", &pp);
printf("function pointer: ---------------------- \\n");
void (*cc)(void) = func; // 함수 포인터에 함수 주소 저장
printf("func add: %p \\n", cc); // 함수의 주소 출력
test_call(cc); // 함수의 주소를 인수로 전달
return 0;
}