함수 포인터

함수 포인터란 함수를 가리키는 포인터를 말한다.
(선언형식)
함수의 type  (*함수포인터명) (함수전달인자);

#include <stdio.h>
#include <stdlib.h>

int plus(int, int);
int minus(int,int);
int myCalc(int,int,int (*)(int,int)); // 선언
int main(int argc, char *argv[])
{
  int a=10, b=20;
  /*
  int hap;
  int (*fptr)(int,int); //함수포인터
 
  fptr = plus; //함수포인터(fptr)로 함수(plus) 가리키게 한다.
  hap = fptr(a,b);
 
  printf("%d + %d = %d\n", a,b,hap);
 
 
  int (*fptr2)(int,int);
  fptr2 = minus;
  printf("%d - %d = %d\n", a,b,fptr2(a,b));
  */
 
  myCalc(a,b,plus); //plus는 함수명
  myCalc(a,b,minus); //minus는 함수명
  system("PAUSE");   
  return 0;
}
int minus(int a,int b)
{
 return a-b;  
}

int plus(int a, int b)
{   
    return a+b;   
}
int myCalc(int a,int b,int (*fptr)(int,int) ) //fptr=함수포인터
{
 printf("%d  %d = %d\n", a,b,fptr(a,b)); //fptr=plus(), minus()
 return 0;  
   
}

void형 포인터

void포인터는 가리키는 대상체의 type에 제한이 없는 포인터를 말한다.
(선언형식)
void* 포인터명;

void *p;
int intArray[5] = {1,2,3,4,5};
double doubleArray[2][3] = {{1.5,2.5,3.5},{4.5,5.5,6.5}};
char *charPrtArray[4] = {"apple", "pear","banana","pineapple"};

p = intArray;
printf("%d\n", *((int*)p+2));

p=doubleArray;
printf("%lf\n", *(*((double(*)[3])p+1)+2) );

p=charPrtArray;
printf("%s\n", *((char**)p+2) );



포인터배열과 배열을 가리키는 포인터

int **p1; // p1은 1차원 int형 포인터를 가리키는 더블포인터
int *p2[5];  //p2는 요소가 5개인 배열로 각 배열의 요소는 int형 포인터다. ( 포인터 배열 )
int (*p3)[5]; //p3은 포인터로 열이 5개인 2차원 배열을 가리키는 포인터 변수로 배열의 각 요소는 모두 int형이다.



+ Recent posts