티스토리 뷰

함수 포인터
# 함수 포인터 이해
1. 소개
1) 정의
2) 필요성
3) 형식
4) 활용

2. 함수 포인터 형식
함수 포인터란?
함수의 주소를 저장하는 변수
2) 필요성
프로그램 코드 간결화
배열로 처리함으로써 중복 코드 제거 가능
상황에 따른 함수 호출
함수를 데이터 형태로 처리 →함수의 보관과 전달이 용이
3) 형식
리턴타입 (*함수 포인터명)(매개변수리스트);
4) 활용

1) 리턴과 매개변수가 없는 함수에 대한 함수 포인터
2) 리턴과 매개변수가 있는 함수에 대한 함수 포인터
3) 함수 포인터 배열
4) 구조체 멤버
#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
#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;
}
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;
}
# 함수 포인터 활용
1. qsort()

2. gsort()

#include
#include
int compare( const void *cmp1,const void *cmp2)
{
return strcmp( (char *)cmp1, (char*)cmp2);
}
#define SIZE_TABLE 10
#define SIZE_ITEM 100
int main( void)
{
char table[SIZE_TABLE][SIZE_ITEM] = {“good”, “hello”, “hi”, “morning”, “computer”, “GCC”, “Programming”};
int ndx;
for ( ndx = 0; ndx < SIZE_TABLE; ndx++){
printf( “%s\n”, table[ndx]);
printf( “n정렬 후n”);
qsort( table, SIZE_TABLE, SIZE_ITEM, compare);
}
for ( ndx = 0; ndx < SIZE_TABLE; ndx++){
printf( “%s\n”, table[ndx]);
}
return 0;
}
#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 |