Programming/C / C++
함수 포인터 색다르게 사용하기
사기꾼프로드
2013. 12. 13. 16:16
#include <stdio.h> #include <iostream> // new 쓸라고 인클루드함.. new가 편해서 struct a { int k1; int k2; int k3; int k4; int k5; }; // int형 변수를 받는 test1 void test1 (void* p) { int i = *((int*)p); printf("%d\n", i*10); } // 구조체를 받는 test2 void test2 (void* p) { a* pIn = (a*)p; printf("%d\n", pIn->k4); } // void를 리턴하고 인자로 void* 를 받는 것을 testr로 typedef 한다. typedef void (*testr)(void* p); void main(void) { a i; i.k1 = 3; i.k2 = 2; i.k3 = 1; i.k4 = 5; // 변수처럼 할당도 된다. 전 new가 편해서 malloc을 안썼습니다. // malloc도 당연히 가능! testr *mtest = new testr[5]; // 모두 null로 초기화 memset( mtest, NULL, sizeof(mtest) ); // 변수처럼 사용이 가능하다. mtest[0] = &test1; mtest[1] = &test2; mtest[2] = &test1; mtest[3] = &test2; mtest[4] = &test1; // 함수인데 변수처럼 if문도 가능 if ( mtest[0] ) { mtest[0](&(i.k4)); } mtest[1](&(i.k1)); mtest[2](&(i.k2)); i.k4 = 7; // 배열의 첫번째는 배열의 시작주소이지만 // 3번째는 3번째의 주소이므로 쓰레기값 뜸 mtest[3](&(i.k3)); mtest[4](&(i.k4)); return; }