카테고리 없음

[C언어] 함수 포인터 이해하기

s뽈록이s 2013. 3. 26. 15:37
void Add();
void Min();

void SelFunction(int s)
{
	void (*fPtr)(void);
	if(s == 1) fPtr = Add;
	else fPtr = Min;
	fPtr();
}

void main()
{
	int sel;
	while(1)
	{
		printf("덧셈(1) 뺄셈(2) 종료(3) : ");
		scanf("%d", &sel);
		if(sel == 3)break;
		if((sel < 1) || (sel > 2))
		{
			printf("잘못된 범위의 수를 입력하셨습니다. \n\n");
			continue;
		}
		SelFunction(sel);
	}
}

void Add()
{
	int a, b;
	printf("덧셈을 위한 두 개의 숫자 입력 : ");
	scanf("%d%d", &a, &b);
	printf("덧셈 결과 : %d\n\n", a + b);
}

void Min()
{
	int a, b;
	printf("뺄셈을 위한 두 개의 숫자 입력 : ");
	scanf("%d%d", &a, &b);
	printf("뺄셈 결과 : %d\n\n", a - b);
}

프로그램 실행화면


포인터도 잘 모르겠는데 함수 포인터라는 놈이 나온다. 정신이 안드로메다로 갈 수도 있다. 도대체 이 포인터 라는 놈은 왜 자꾸 나오는 것일까? 엄청 편하기 때문이다.


함수 포인터도 써야하는 타이밍을 안다면 쉽게 사용할 수 잇다. 그리고 보통 잘 사용하지 않을 수 밖에 없는 이유가 있다. 우선 써야 하는 경우를 생각해 보자.


내가 지금 임베디드 프로그래밍을 하고 있다고 치자, 또는 운영체제를 수정하고 있다고 치자. 어느 함수를 만들어야 한다. 그런데 이 함수의 성격상 다른 함수들을 실행하여야 하는데 그때 그때 실행해야 할 함수가 다를 수가 있다.


이럴 때 함수 포인터를 사용하는 것이다. 이 함수 포인터를 이용해 실행 할 함수의 주소 값 즉 포인터를 넘겨 줌으로써 원한느 함수를 그때 그때 실행할 수 있는 것이다.


위의 에제도 똑같은 내용이다. 여기서는 매개변수로 sel값만을 넘겨 주었지만 함수 포인터를 직접 넘겨 주는 것이 더 좋은 예라고 할 수 잇다. 사실 잘 쓰지 않는 놈이니 시험 문제에 나오는 정도만 알면 될 것 같다.