함수 포인터
함수 포인터란 함수를 가리키는 포인터를 말한다.
(선언형식)
함수의 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형이다.
함수 포인터란 함수를 가리키는 포인터를 말한다.
(선언형식)
함수의 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형이다.
'Languages > C Language' 카테고리의 다른 글
선택정렬 (0) | 2011.12.26 |
---|---|
Static(정적) 변수 (0) | 2011.12.23 |
C Api, gotoxy(), blue() 함수 등등, 소스 및 사용법 (0) | 2011.12.22 |
재귀함수를 이용한 10진수 -> 2진수,16진수 변환 (0) | 2011.12.22 |