함수포인터 정리

함수 포인터
 
 


● 함수 포인터의 이해

 

 - 함수는 cpu에 의해 실행이 된다.
   > 결국은 메인 메모리 영역에 함수가 있어야 한다.

 

 - 함수이름도 실행시, 의미를 지닌다.
   > 메모리에 존재시, 함수이름은 메모리상의 위치를 가리키는 포인터다.
   > 결론 : 함수이름은 포인터다

 

 - main함수의 main도 의미를 지닌다.


ex)

int Fuction(int a, int b) {...}

int main(void) {Funtion(10, 20);...}

// Funtion란 이름의 포인터가 가리키는 메모리 공간에 존재하는 메함수를 호출 하라
// 10, 20 란 값을 메모리상에 올린다.

 

 

 

● 함수 타입

 

 - 함수 포인터 : 주소 + 자료형(타입)

 

 - 함수포인터 타입을 결정짓는 요소 : 리턴타입 + 매개 변수 타입
   > int fct(int a) ====> int (*fptr)(int);
     - (*fptr)는 리턴타입이 int 이고 인자값이 int형인 포인터이다
     - fptr : 변수, fct : 상수
     - fct(10) : fct 라는 포인터가 가리키는 메모리 공간에 가르키는 함수 호출
     - P(10); // 가능

   > double fct2(double a, double b) ====> double(*fPtr2)(double, double);
     - double (*p)(double, double) 함수를 가리키는 변수
     - 차이점 : fct2는 상수, p는 변수

 

 

예제 ) ================================================================================


#include <stdio.h>

 

void Add(int a, int b);  
void ChPrint(char* str);

 

int main(void)
{
 char * string = "This is a Function Pointer";
 
 int a = 10;
 int b = 20;


//함수포인터 사용

 void (*fPtr)(int, int) = Add;   
 void (*fPtr_1)(char* str) = ChPrint; 


 fPtr(a, b);           // == Add(a, b);

 fPtr_1(string);      // == ChPrint(str);


/*
 printf("%d, %d \n", Add, fPtr1); 
// 출력결과는 같다. 

// 결과적으로 가지는 값은 같다.

// 함수포인터로 초기화 되었기 때문에, 같은 주소값이 출력

*/
 return 0;
}

 

void Add(int a, int b)
{
 printf("%d + %d = %d \n", a, b, a+b);
}

 

void ChPrint(char* str)
{
 printf("str = %s \n", str);
}


소스 출저: 열혈강의 C 윤성우

 

======================================================================================


갑자기 생각난 함수포인터 한번 정리해봄 ㅎ

이 글을 공유하기

댓글

Designed by JB FACTORY