본문 바로가기

Programming/ C Language

[C] 함수 포인터

728x90
반응형

▷ 함수 포인터란?

  함수의 주소를 담는 포인터

ex) 자료형 (*함수포인터명)(매개변수형, ....);

 

◇ 일반적인 함수 호출

int add(int a, int b){
	return a + b;
}
main(){
	printf("%d\n", add(10, 5));
}

◇ 함수포인터를 이용한 호출

int add(int a, int b){
	return a + b;
}
main(){
	int (*fp)(int, int);
    fp = add;;
    printf("%d\n", fp(10, 5));
}

 

◇ 형식이 같은 다양한 함수를 호출할 수 있다.

int add(int a, int b)[return a + b;}
int sub(int a, int b)[return a - b;}
int mul(int a, int b)[return a * b;}
int dvd(int a, int b)[return a / b;}
main(){
	int (*fp)(int, int);
    fp = add;
    printf("%d\n" , fp(10, 5)); //fp 는 add함수 호출
    
    fp = sub;
    printf("%d\n" , fp(10, 5)); //fp 는 sub함수 호출
    
    fp = mul;
    printf("%d\n" , fp(10, 5)); //fp 는 mul함수 호출
    
    fp = dvd;
    printf("%d\n" , fp(10, 5)); //fp 는 dvd함수 호출
}

 

 

▷ 함수 포인터 배열

  함수 포인터도 배열로 만들 수 있다.

  변수 포인터 함수포인터
변수정의 int a; int *p; int (*fp)(int, int);
배열정의 int a[2]; int *p[3] int (*fp[4])(int, int);

◇ 함수 포인터 배열 사용하기

int add(int a, int b){return a + b;}
int sub(int a, int b){return a - b;}
int mul(int a, int b){return a * b;}
int dvd(int a, int b){return a / b;}

main(){
	int (*fpa[4])(int, int) = {add, sub, mul, dvd};
    // int를 리턴하는 함수를 가리키는 포인터가 4개인 배열
    // 함수포인터 배열
    
    int dx;
    for(dx = 0; dx < 4; dx++)
    	printf("%d\n", fpa[dx](10, 5));
}

 

반응형