6. 함수(5) - 함수를 지시하는 포인터

WanJu Kim·2022년 10월 25일
0

C++

목록 보기
29/81

일반 변수와 마찬가지로 함수도 주소를 가지고 있다. 함수의 주소는 함수 선언에서 괄호를 빼면 된다.

Add()	// 함수 호출.
Add		// 함수 주소.

일반 변수는 포인터를 만드려면 그 가리키는 데이터가 어떤 데이터형인지 알았어야 했다. 함수도 마찬가지이다. 함수 포인터를 만들기 위해서는, 함수의 리턴 데이터형과 매개변수들을 알아야 한다. 함수 포인터는 다음과 같이 작성한다.

double pam(int);	// 함수 원형.
double (*pf)(int);	// 함수 포인터. pf는 하나의 int 매개변수를 취하고, double형을 리턴한다.
pf = pam;			// 함수의 주소 대입.

함수의 선언과 모양이 비슷하다. pam이 함수인 것처럼, (*pf)도 함수이다. 그리고 pf는 함수를 지시하는 포인터다. 중요한 건 연산자 우선순위 때문에 괄호를 반드시 써주어야 한다.

double (*pf)(int)	// pf는 double형을 리턴하는 함수를 지시하는 포인터.
double* pf(int);	// pf()는 double형을 지시하는 포인터를 리턴하는 함수.

함수와 함수 포인터는 리턴형과 매개변수가 일치해야 한다. 그렇지 않으면 에러가 일어난다.

함수 포인터를 매개변수로 가지는 함수의 선언은 다음과 같다.

void estimate(int lines, double (*pf)(int));	// 함수 원형.

estimate(50, pam)	// 함수 사용.

일반 변수와 포인터의 관계에서 포인터 변수 앞에 역참조 연산자(*)를 붙이면 그 값이 나왔듯이, 함수 포인터에도 *를 붙이면 함수 이름과 같은 역할을 한다.

double pam(int);
double (*pf)(int);
pf = pam;
double x = pam(4);	// 일반 함수 호출.
double y = (*pf)(5);
double y = pf(5);	// 이렇게도 가능.
profile
Question, Think, Select

0개의 댓글