#include <stdio.h>
int WhoIsFirst(int age1, int age2, int (*cmp)(int n1, int n2))
{
return cmp(age1, age2);
}
int OlderFirst(int age1, int age2)
{
if (age1 > age2)
return age1;
else if (age1 < age2)
return age2;
else
return 0;
}
int YoungerFirst(int age1, int age2)
{
if (age1 < age2)
return age1;
else if (age1 > age2)
return age2;
else
return 0;
}
int main(void)
{
int age1 = 20;
int age2 = 30;
int first;
printf("입장순서 1 \n");
first = WhoIsFirst(age1, age2, OlderFirst);
printf("%d세와 %d세 중 %d세가 먼저 입장! \n\n", age1, age2, first);
printf("입장순서 2 \n");
first = WhoIsFirst(age1, age2, YoungerFirst);
printf("%d세와 %d세 중 %d세가 먼저 입장! \n\n", age1, age2, first);
return 0;
}
int WhoIsFirst(int age1, int age2, int (*cmp)(int n1, int n2)){ ... } 함수에 매개변수로 age1, age2 변수를
1번째와 2번쨰 매개변수로 전달하고 3번쨰 매개변수로 함수 포인터를 전달하여 WhoIsFirst함수에서
OlderFirst함수를 실행하게 했다.
YoungerFirst 함수 포인터를 사용해도 가능하다.
#include <stdio.h>
void SoSimpleFunc(void)
{
printf("I'm so simple");
}
int main(void)
{
int num = 20;
void* ptr;
ptr = #
printf("%p \n", ptr);
ptr = SoSimpleFunc;
printf("%p \n", ptr);
return 0;
}
void 포인터는 int형 주소를 가지고 있다가 함수를 가지게 됐다. 하지만 포인터 연산이 불가능하고
값의 변경이나 참조가 불가능하다. void형 포인터는 일단 주소 값에만 의미를 두고 포인터의 형은
나중에 결정할 때 사용한다.
'PROGRAMMING LANGUAGE > C' 카테고리의 다른 글
21강, 22강 TYPEDEF, 공용체, 열거형 (0) | 2021.09.20 |
---|---|
20강 구조체 (0) | 2021.09.16 |
18강 다중포인터 (0) | 2021.09.16 |
17-1 포인터 배열과 배열 포인터 (0) | 2021.09.16 |
17강 다차원 배열 (0) | 2021.09.16 |