함수포인터란? 개념과 예제

얼마나얼·2024년 4월 29일

C프로그래밍

목록 보기
1/1

함수포인터란?

C언어에서 포인터 변수 라는것이 있는데 이는 변수의 메모리 공간주소를 가리키는 변수이다.

"변수"이기 때문에 다양한 값이 할당 될 수 있는데 그 중 함수(function) 또한 포인터 변수에 할당될 수 있다.

아래 간단한 함수포인터 예제 먼저 봐보자.

#include <stdio.h>

int add(int a, int b) {		//덧셈 함수 선언
    return a + b;
}

int main() {
    int (*operation)(int, int);		//함수포인터 선언

    operation = add;				//함수포인터에 함수 할당

    printf("%d\n", operation(5, 3));//함수호출 및 결과물 출력

    return 0;
}


8 //출력결과
	

함수포인터 선언 방법

함수포인터를 선언하고 함수를 할당하는 방법은 다음과 같다.

①int ②(*operation)③(int, int);

①은 함수의 반환타입
②는 함수포인터 변수명
③는 함수에 필요한 매개변수를 지정

여기서 주의할 점은 아래 두개 선언은 다른것이라는 것
1. int operation(int,int); -> int값을 가리키는 pointer 값을 return하는 함수
2. int (
operation)(int,int); -> int값을 반환하는 함수를 가리키는 함수포인터

연산 우선순위때문에 변수명에 ()를 씌운거라 생각하면 된다.

함수포인터 왜 쓰는거야?

함수포인터를 사용하는 이유는 다음과 같다.

  1. 코드의 가독성을 높이기 위해
    • 함수 포인터가 어떤 종류의 함수를 가리키는지 명시적으로 나타내므로 코드를 읽는 사람이 빠르게 이해할 수 있다.
  2. 유지보수의 효율성
    • 함수포인터를 따로 선언하면 함수의 주소를 저장하는 변수의 역할이 명확해져 나중에 코드를 수정할때 해당 함수포인터를 변경하거나 다른 함수포인터로 바꾸는 작업이 쉬워진다.
  3. 코드 재사용성을 높이기 위해
    • 함수포인터를 별도로 선언하면 다양한 함수에 대한 포인터를 선언하고 사용할 수 있다.

함수포인터 사용 예제

아래 코드는 이해를 돕는 예제 코드이다.

#include <stdio.h>

// 두 정수를 더하는 함수
int add(int a, int b) {
return a + b;
}

// 두 정수를 빼는 함수
int subtract(int a, int b) {
return a - b;
}

int main() {
// 함수 포인터 선언
int (*operation)(int, int);

// add 함수의 주소를 함수 포인터에 저장
operation = add;

// 함수 포인터를 사용하여 add 함수 호출
printf("Addition: %d\n", operation(5, 3));

// subtract 함수의 주소를 함수 포인터에 저장
operation = subtract;

// 함수 포인터를 사용하여 subtract 함수 호출
printf("Subtraction: %d\n", operation(5, 3));

return 0;

}

만약 add와 subtract 함수 이름을 직접 사용하면 코드의 가독성이 떨어지고, 함수를 변경해야 할때 함수 호출 부분을 일일히 찾아 수정해야 하는 번거로움이 있지만, 함수포인터를 사용하면 위 번거로움들을 해결할 뿐만 아니라 함수포인터를 이용하면 다양한 함수를 가리킬 수 있어 코드의 재사용성도 높아지는 이점이 있다.

약간 자바의 interface 문법과 비슷한것 같다.

profile
괜찮은개발자입니다

0개의 댓글