C언어

[C언어] 함수포인터 배열 사용

소혜아빠 2021. 1. 13. 15:05
/* 각 A,B,C,D 기능을 하는 함수가 있다고 하면 */
void Func_A(void);
void Func_B(void);
void Func_C(void);
void Func_D(void);

/* 포인터 배열로 함수포인터를 선언할 수 있음. */
/* 단, 동적할당이 안되어 불편함 */
void (*Func_Pointer[4])(void);

void main(void)
{
	int i = 0;
	/* 대충 이런식으로 주소를 지정해줄 수 있는데 비효율적임 */
    Func_Pointer[0] = Func_A();
    Func_Pointer[1] = Func_B();
    Func_Pointer[2] = Func_C();
    Func_Pointer[3] = Func_D();
    
    /* 호출만 시켜줌 */
    for(i = 0; i < 4 ; i++)
    {
    	(*Func_Pointer[i])();	
    }
    
}

함수 포인터를 배열로 선언해서 쓰려고 하니까, 동적할당도 안되고 비효율적인 것 같아서 구조체 배열로 쓰는게 좋을 거 같음.

/* 구조체 내에 함수 포인터를 선언함 */
struct VOID_FUNC_VOID_POINTERS
{
	void (*Func)(void);
};

void Func_A(void);
void Func_B(void);
void Func_C(void);
void Func_D(void);

/* 이 함수포인터 내용을 포함한 구조체를 배열로 선언해서 각 인덱스별로 각 기능에 대한 함수주소를 지정함 */\
struct VOID_FUNC_VOID_POINTERS Structs_Func_Pointer[]
{
	Func_A,
    Func_B,
    Func_C,
    Func_D,
};

void main(void)
{
	unsigned char i = 0;
    
    /* 일단 호출구문만 넣음 */
    for (i = 0 ; i < 4 ; i++)
    {
    	(*Structs_Func_Pointer[i])();
    }
}