✅ 목표 (Goal)

이전시간에는 리턴타입도 없고, 인자도 없는 형태의 함수 포인터를 다루어 보았는데,

이번 시간에는 리턴도 하고, 인자도 있는 형태의 함수 포인터를 다루어 보자.

✅ 지난 시간 복습

인자와 리턴값에 따른 함수의 4가지 종류

✅ 함수의 형태 4가지와 이를 가리키는 함수 포인터

// 리턴타입은 없고, 인자도 없는 경우
void bts(void);

// 리턴타입은 없고, 인자는 있는 경우
void exo(int a);

// 리턴타입은 있는데, 인자가 없는 경우
int ses(void);

// 리턴타입도 있고, 인자도 있는 경우
int hot(int);
// 리턴타입은 없고, 인자도 없는 경우
void (*fp_bts)(void);

// 리턴타입은 없고, 인자는 있는 경우
void (*fp_exo)(int a);

// 리턴타입은 있는데, 인자가 없는 경우
int (*fp_ses)(void);

// 리턴타입도 있고, 인자도 있는 경우
int (*fp_hot)(int);

✅ 예제 (Example)

#include <stdio.h>

void bts(void)  { printf("%s\\r\\n", __FUNCTION__); }
void exo(int a) { printf("%s\\r\\n", __FUNCTION__); }
int  ses(void)  { printf("%s\\r\\n", __FUNCTION__); return (11); }
int  hot(int a) { printf("%s\\r\\n", __FUNCTION__); return (22); }

int main() {
	printf("함수 포인터를 이용하지 않고 그냥 호출\\r\\n");
	bts(); // (1)
	exo(33);
	ses();
	hot(44);
	printf("\\r\\n");

	printf("함수 포인터를 이용해서 호출\\r\\n");
	// 함수포인터를 이용해서 호출을 해봐요.
	void (*fp_bts)(void) = &bts;
	void (*fp_exo)(int) = &exo;
	int  (*fp_ses)(void) = ses;
	int  (*fp_hot)(int) = hot;

	(*fp_bts)();
	(*fp_exo)(111);
	(*fp_ses)();
	(*fp_hot)(222);
	printf("\\r\\n");
/*
	printf("함수 포인터를 * 없이 호출\\r\\n");
	fp_bts();
	fp_exo(111);
	fp_ses();
	fp_hot(222);
	printf("\\r\\n");

	printf("함수를 함수 포인터처럼 호출\\r\\n");
	(*bts)();
	(*exo)(33);
	(*ses)();
	(*hot)(44);
	printf("\\r\\n");
*/
	return 0;
}

image.png

변수를 가리면 변수의 데이터타입이다. 1