1. 선언 및 사용
1) 선언
return type ( * function name ) ( variable type1, variable type2, ... );
ex) double (*fun) (double,double);
> fun이라는 이름을 가지고, double변수를 두 개를 가질 수 있는 함수 포인터
2) 사용
function pointer = function;
ex)
#include<stdio.h>
int puls(int x, int y) {
return x+y;
}
int (*fun)(int x, int y);
main() {
fun = plus;
printf("%d\n",fun(2,3));
}
2. void type변수 다루기
1) 변수 타입을 변경하여 다루기
#include <stdio.h>
int igreater(void *i, void *j){
if (*((int*)i) > *((int*)j)) {
return 1;
}
else return 0;
}
int main(){
int i=3;
int k=5;
if (igreater(&i, &k))
printf("i 가 크다.\n");
else
printf("j 가 크다.\n");
}
여기서 중점으로 볼 곳은 int igreater(void *i, void *j)가
*((int *)i),*((int *)j)로 변화하는 것이다.
igreater에서는 void로 받은 변수를 int로 변환시켜서 사용하는 것이다.
문법을 잘 살펴봐야한다.
*((type *)name) > name의 변수를 type크기로 동적할당을 한 후 포인터로 선언한다.
ex )
*((int *)i) > i를 int의 크기로 동적할당 한 후 포인터로 정한다.
2) 변수를 1byte(char)씩 사용하기
#include<stdio.h>
int swap(void *i, void *j, int size)
{
int k;
char *p, *q;
p = i;
q = j;
char temp;
for ( k = 0 ; k < size ; k++ , *p++, *q++){
temp = *p;
*p = *q;
*q = temp;
}
}
편의상 메인함수는 쓰지 않았다.
위의 소스는 각 변수의 size를 알 때 뒤바꺼 주는 함수이다.
main에서 넘겨 줄 때 변수의 크기를 같이 넘겨주어야 한다. 왜냐하면 크기만큼 뒤바꺼 줘야하기 때문이다.
여기서 말할 중점인 char *p, char *q를 선언하여 i와 j를 1byte씩 사용하는 것이다.
어떠한 변수가 오더라도, 그 변수의 크기를 알 고 있다면, char타입을 사용하여 변수를 다룰 수 있다.