티스토리 뷰

함수 포인터

# 함수 포인터 이해

1. 소개
1) 정의
함수 포인터란? 함수의 주소를 저장하는 변수

2) 필요성
프로그램 코드 간결화 배열로 처리함으로써 중복 코드 제거 가능 상황에 따른 함수 호출 함수를 데이터 형태로 처리 →함수의 보관과 전달이 용이

3) 형식
리턴타입 (*함수 포인터명)(매개변수리스트);

4) 활용

2. 함수 포인터 형식
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 
#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()

#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;
}        
2. gsort()

#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;
} 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함