#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;
}