본문 바로가기
C언어

C언어 기초 part 2-7. 함수 포인터

by algosketch 2020. 6. 10.
  • 함수 포인터

 - 이 글을 읽는 시점에는 "C언어 기초 part 2-6. void 포인터"가 올라가지 않았을 수 있습니다.

 

1. 함수 포인터

 함수 포인터를 이용하면 함수를 변수처럼 사용할 수 있다. 변수 뿐만 아니라 함수도 메모리 상에 저장되어 있기 때문에 포인터 변수에 저장하는 것이 가능하다. 선언 방법 : (반환형) (*변수 이름)(매개변수 타입)

#include <stdio.h>

int add(int num1, int num2) {
	return num1 + num2;
}

int sub(int num1, int num2) {
	return num1 - num2;
}

int main(void) {
	int (*plus)(int, int) = add;
	int (*subtract)(int, int) = sub;
	printf("add: %d sub: %d", plus(5, 2), subtract(5, 2));
    // 출력
    // add: 7 sub: 3
	
	return 0;
}

 

 이 글을 쓰기 위해 함수 포인터에 대한 문법을 찾아봤다. 그만큼 사용할 일이 없다고 봐도 될 것 같다. 그러니 이정도만 언급하고 넘어가겠다. 실제로 C언어에서 변수에 함수를 담는 문법이 다른 언어에 비해 복잡하기도 하다.

 함수 포인터는 C++ 혹은 다른 언어에서 배우게 될 클래스(객체 지향 프로그래밍, OOP)의 기초가 된다. 뿐만 아니라 javascript나 kotilin같은 함수형 프로그래밍이 가능한 언어의 기초가 된다. js나 kotlin에서는 C언어처럼 함수 포인터 문법에 헷갈릴 만한 요소가 없으니 걱정하지 말자... (애초에 포인터 개념이 없다.)