본문 바로가기
01.Bit 단기/C

18_함수포인터

by chojju 2018. 4. 28.
반응형

#include <stdio.h>
#include <conio.h>
void fun1();
void fun2();
void fun3();
void fun4();
void fun5();

int main()
{
 fun5();
 return 0;
}
//함수의 이름은 주소이다.
void fun1()
{
 printf("%d : 0x%p\n", main, main);
}

void foo() { printf("foo()\n"); }
void woo(int n, char ch) { printf("%d : %c\n", n, ch); }
int goo(char * str) { printf("%s\n", str);  return sizeof(str); }

//함수 포인터 : 함수를 저장하는 포인터(함수의 주소를 저장)
void fun2()
{
 // void(*f1)() = foo;
 // foo();  // 함수의 주소로 이동하라.
 // f1();

 // void(*f2)(int, char);
 // f2 = woo;
 // woo(10, 'a');  f2(20, 'b');

 int(*p3)(char*);
 p3 = goo;
 printf("%d\n", p3("문자열전달"));
}

//사용예1) 함수 포인터의 인자 전달
int add(int n1, int n2) { return n1 + n2; }
int sub(int n1, int n2) { return n1 - n2; }
int fun_exam(int num1, int num2, int(*f)(int, int))
{
 int ret = f(num1, num2);
 return ret;
}

void fun3()
{
 int ret = fun_exam(10, 20, sub);
 printf("%d\n", ret);
}


//사용예2 : 함수 포인터 저장 배열
void insert() { printf("insert\n"); }
void select() { printf("select\n"); }
void update() { printf("update\n"); }
void delete_() { printf("delete\n"); }
void fun4()
{
 char ch;
 //void (*)(void)
 void(*arr[4]) (void) = { insert, select, update, delete_ };
 // arr[0](); // == insert()
 while (1)
 {
  printf("[1]insert [2]select [3]update [4]delete\n");
  printf("[5]exit\n");
  ch = _getch();
  //'1' : 49
  if (ch == '5')
   return;
  arr[ch - '1']();  // 함수 호출
        /*
        switch (ch)
        {
        case '1': insert(); break;
        case '2': select(); break;
        case '3': update(); break;
        case '4': delete(); break;
        case '5': return;
        }
        */
 }

}


//typedef : 타입을 정의하겠다.
//          새로운 타입을 만드는것이 아니라
//          존재하는 타입의 다른 이름을 생성하는 것
typedef unsigned int uint;

int max(int n1, int n2) { return (n1 > n2) ? n1 : n2; }

typedef int(*FUN)(int, int); //FUN : type 이름
void fun5()
{
 unsigned int num;
 uint num1;

 int(*f1)(int, int);  f1 = max;
 printf("%d\n", max(10, 20));

 FUN f2;  f2 = max;
 printf("%d\n", max(10, 20));
}

반응형

'01.Bit 단기 > C' 카테고리의 다른 글

20_문자열  (0) 2018.04.28
19_void포인터  (0) 2018.04.28
17_포인터  (0) 2018.04.28
16_포인터배열  (0) 2018.04.28
15_배열  (0) 2018.04.28

댓글