Jiyong's STUDY

함수 포인터 본문

프로그래밍/C

함수 포인터

Kingjiyong 2018. 5. 16. 01:20

함수 포인터란?


함수의 구조를 보면


type FunctionName(type a...)


함수에는 type형의 정보와 전달 인자의 정보가 항상 있다.

그렇다면 이것을 보고 어쩌면 함수도 포인터가 아닐까?라는 생각을 할 수 있는데

실제로 함수의 이름은 함수가 할당되어 있는 메모리를 가리키는 포인터이다.

정확히는 함수 포인터 상수라고 할 수 있다.


그렇다면 함수 포인터 변수는 어떻게 선언할까?


그 전에 함수 포인터의 포인터 형을 알아보자면


int FunctionName(int a, double b);


반환형이 int이며, 전달 인자로 int형, double형을 하나씩 받는다고 설명해야 한다.

즉 함수 포인터의 포인터 형에는 반환형과 전달 인자의 선언에 대한 정보가 담겨있다.


그렇다면 함수 포인터 변수를 선언할 때 그러한 내용이 있어야 하므로, 

FunctionName을 가리킬 수 있는 함수 포인터 변수를 선언한다면


int (*ptr)(int, double)이 된다. 


마지막으로 예제를 보자면


void AddNum(int a, int b){

printf("%d+%d=%d\n", a, b, a+b);

}

int main(){

void (*fptr)(int, int)=&AddNum;

fptr(3,4);

}


결과 >> 3+4=7


(참고로 전역변수로의 선언 또한 가능하다.)