티스토리 뷰
함수 포인터
함수 포인터 이해
기본 개념
1)함수 포인터란? : 함수의 주소를 저장하는 변수
2)필요성 :
- 프로그램 코드 간결화
- 배열로 처리함으로써 중복 코드 제거 가능
- 상황에 따른 함수 호출
- 함수를 데이터 형태로 처리 ->함수의 보관과 전달이 용이
3)형식 : 리턴타입(*함수 포인터명)(매개변수리스트);
함수 포인터 형식
[1]리턴과 매개변수가 없는 함수에 대한 함수 포인터
#include
void hello()
{
printf(“Hello, world!\n”);
}
void good()
{
printf(“Good morning!\n”);
}
int main()
{
void(*fp)();
fp = hello;
fp();
fp = good;
fp();
return 0;
}
[2]리턴과 매개변수가 있는 함수에 대한 함수 포인터
#include
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int main()
{
int(*fp)(int, int);
fp = add;
printf("%d\n", fp(10, 20));
fp = sub;
printf("%d\n", fp(10, 20));
return 0;
}
[3]함수 포인터 배열
#include
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
7
함수 포인터
함수 포인터 이해
함수 포인터 형식
2
함수 포인터 배열
3
#include
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int main()
{
int funcNumber;
int num1, num2;
int (*fp)(int, int) = NULL;
printf(“함수 번호와 계산할 값을 입력하세요: ”);
scanf(“%d %d %d”, &funcNumber, &num1, &num2);
switch (funcNumber) {
case 1:
fp = add;
break;
case 2:
fp = sub;
break;
}
printf(“%d\n”, fp(num1, num2));
return 0; }
[4]구조체 멤버
#include
struct Calc {
int (*fp)(int, int);
};
int add(int a, int b)
{
return a + b;
}
*구조체가 함수를 포함하는 형태로 구현 가능*
[5]함수의 매개변수
#include
int add(int a, int b)
{
return a + b;
}
void calc(int (*fp)(int, int))
{
printf(“%d\n”, fp(10, 20));
}
int main()
{
calc(add);
return 0;
}
함수 포인터 활용
qsort()
- qsort는 stdlib.h를 include 해야 함
- qsort는 테이블의 자료를 퀵정렬하는 함수임
- 비교함수는 처리할 자료형에 맞게 직접 구현해야 함
-
항목 내용 함수원형 void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));헤더 stdlib.h 기능 테이블의 자료를 퀵 정렬로 내림이나 오름차순으로 정렬 매개변수 void *base -> 테이블의 포인터 주소
size_t num -> 테이블에 들어 있는 실제 데이터 개수
size_t size -> 한 개 요소의 크기
int (*compar)(const void *, const void *)
-> 두 요소를 비교하기 위한 함수 포인터반환값 void 구현 비교함수는 직접 구현해야 함 (배열의 자료형과 비교방식이 다르기 때문)
#include
#include
int values[] = { 40, 10, 100, 90, 20, 25 };
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main ()
{
int n;
qsort (values, 6, sizeof(int), compare);
for (n=0; n<6; n++)
printf (“%d ”,values[n]);
return 0;
}
'JAVA기반 스마트웹 개발2021 > 프로그래밍 언어활용' 카테고리의 다른 글
파일 입출력 라이브러리(기초) (0) | 2021.08.08 |
---|---|
도서관리 시스템 고도화(동적 메모리) (0) | 2021.08.08 |
동적 메모리 (0) | 2021.08.08 |
도서관리 시스템 고도화(라이브러리 적용) (0) | 2021.08.08 |
문자열 비교 검색 라이브러리 (0) | 2021.08.08 |
댓글
© 2018 webstoryboy