C언어 기초 함수 포인터
C언어 기초 함수 포인터
이번 글에서는 C언어 기초 중에서 함수 포인터에 대해서 기본 개념과 선언하는 방법을 알아보겠습니다. 우리가 정의하는 함수도 변수와 마찬가지로 메모리에 저장되는데요. 함수의 이름이 그 주소 값을 의미하는 것입니다. 즉, 이 주소 값을 저장하기 위한 별도의 함수 포인터를 선언할 수 있습니다.
함수 포인터도 선언하기 위해서는 먼저 포인터 형을 결정지어야 하는데 다음과 같은 함수가 있다고 가정해볼게요.
int aaa(int x){...}
이 함수는 반환형과 매개변수 모두 int형인 aaa라는 함수입니다. 그리고 앞에서 정의한 대로 'aaa'는 이 함수의 메모리상의 주소 값을 저장하고 있는데요. 함수 포인터는 이 반환형과 매개변수를 기준으로 포인터 형을 결정짓습니다. 그래서 이 함수의 주소 값을 저장할 포인터 변수는 다음과 같이 선언합니다.
int (*po) (int);
이 형식에서 po는 포인터 이름이고 앞쪽의 int는 반환형 뒤쪽의 int는 매개변수의 자료형을 의미합니다. 만약 다음과 같이 매개변수가 두 개인 함수라면...
int bbb(int x, int y){}
포인터 변수는 int (*po2) (int, int); 가 되는 것입니다. 그리고 이 포인터 변수에 함수의 주소 값을 저장하기 위해서는 다음과 같이 대입하면 됩니다.
po2=bbb;
이제 po2=bbb가 되는 건데요. 일반적으로 함수를 호출할 때는 bbb(5, 6) 형식으로 하지만, 이렇게 포인터 변수에 대입해놨으니 앞으로는 po2(5, 6)도 가능합니다. 지금까지 정리한 내용으로 예제를 만들어서 확인해보겠습니다.
▲ su1과 su2 변수를 선언 및 초기화 한 후 함수 포인터 po를 선언하고 있습니다. 그리고 이 포인터에 함수 aaa를 대입하고 있는데요. 이제 po에는 aaa의 주소 값이 저장되고 po=aaa는 같아지기 때문에 각각 호출하면 같은 결과가 출력될 것입니다. 프로그램을 실행해서 확인해보고 마무리할게요.
이렇게 해서 C언어 기초에서 함수 포인터의 개념을 정리해봤습니다. 수고하셨어요.