Day 3 - Function Pointer

2025. 2. 26. 13:19·IDEC 교육/Embedded C

Function Pointer

함수 포인터: 함수를 가리키는 포인터 변수

*: Pointer / []: Array / (): Function 으로 생각

Example

void func(int a, int b) { ... } // 정의
...
int main()
{
    void (*p)(int, int); // 함수 포인터 변수
    p = func;
    p(1, 2);

    return 0;
}

Usage 1-1

함수는 매개변수를 전달 받고 다음 함수로 전달하는 경우가 있는데
그럴때, 함수 포인터를 매개변수로 전달 받을 수 있고, 유기적인 함수의 선택이 가능하다.
qsort(퀵소트, 퀵정렬)함수와 같은 경우 compare함수를 매개변수로 전달 받는데,
이때 사용자는 해당 함수만 수정하여 기능을 변경 할 수 있다.

Usage 1-2

이벤트 핸들러로 사용 될 경우, 특정 이벤트가 발생시에 어떤 동작을 하는 함수가 있다면,
하나의 함수에서 각각의 다른 이벤트를 함수 포인터로 전달 받아서 실행 할 수 있게 된다.
예시로 void eventHander(void (*handler))라는 함수가 있다면 handler에 원하는 event종류를 골라 넣을 수 있게 된다.
또한 include를 통해 불러온 라이브러리 함수에 현재 파일에서 작성된 함수를 매개변수로 넘겨주어 실행할 수 있다.

= include는 선언부만 복사 해오기 때문에 실제 함수는 해당 오브젝트(.o) 파일로 jump하여서 실행
(이런식으로 연결 시켜주는게 Linking이라고 부름)

Usage 2

System 부팅 시에 Bootloader에서 Application을 넘어갈 경우에 사용
Bootloader의 실행 위치는 이미 정해저 있고 부팅시에 우선적으로 시작된다.
그 후 Bootloader는 Application을 실행하기 위해 0x0000_1000를 참조하는데,
Application의 시작 함수(Entry Point)(= void app main(void))의 주소를 저장해두어야한다,
여기서 해당 함수의 주소, 즉 함수 포인터가 쓰이게 되는 것 이다.

저작자표시 비영리 변경금지 (새창열림)
'IDEC 교육/Embedded C' 카테고리의 다른 글
  • Day 3 - 외부 변수 및 함수 참조
  • Day 3 - Structure
  • Day 3 - Character Pointer & Array
  • Day 2 - Pointer & Array
Zi_Yoon
Zi_Yoon
머리 속에 정리하는 곳 <전자공학>
  • Zi_Yoon
    ZY_repo
    Zi_Yoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • HDLBits (25)
        • Verilog (19)
        • Circuits (4)
        • Verification (0)
      • IDEC 교육 (1)
        • Embedded C (13)
        • Verilog HDL (8)
      • Hardware (8)
        • RISC-V Project (1)
        • Computer Architecture (0)
        • AMBA (2)
        • FPGA (0)
        • 논문 읽기 (1)
        • ETC. (4)
      • 42서울 (13)
        • 리눅스 (12)
        • 네트워크 (1)
      • 생각 (1)
      • 취업 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    fucntion
    AMBA
    signal trap
    hdlbits
    lsblk
    debian
    ARM
    보안 쉘
    vm
    세션 키
    QUARTUS
    c
    axi
    embedded
    pointer
    AXI4
    비대칭 키
    verilog
    verilator
    ssh
    AppArmor
    Keil
    centos
    APT
    IDEC
    charater
    research rabbit
    RISC-V
    fpga
    bit-wise and
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Zi_Yoon
Day 3 - Function Pointer
상단으로

티스토리툴바