C언어 - 함수의 포인터

2023. 1. 7. 22:29·C프로그래밍/개인 공부

함수 포인터

 

 

지금까지 우리는 포인터를 주로 변수를 가르키는데 사용했다.

하지만, 포인터는 함수도 가르킬 수 있다.

함수도 실행되는 주소를 가진다.

일반적인 포인터는 변수가 저장되어있는 주소를 가르키지만, 함수 포인터는 함수가 시작되는 주소를 가르킨다.

 


 

함수 포인터는 이렇게 선언한다.

int (*pf)(int, int);

int형이고 매개변수로 int, int를 갖는 함수 포인터 pf.

라는 뜻이다.

 

 

예를들어, sub함수를 정의하고 sub함수를 가르키는 함수포인터를 설정해보자.

int sub(int, int); //함수원형 정의

int (*pf)(int, int); //함수 포인터 정의

pf = sub; //함수의 이름을 함수 포인터에 대입.

어려울 것이 없다.

여기서 눈여겨 봐야할 점은, pf = sub로 주소를 대입할때 주소연산자 &를 사용하지 않았다.

이는, 함수의 이름이 함수의 시작 주소를 갖는다 라는 것!

 

 

함수 포인터가 특정한 함수를 가르키게 했다면,

이젠 함수 포인터를 이용해서 함수를 호출 해보자.

result = (*pf)(10, 20);

함수를 호출하고, 그 리턴값을 result에 할당했다.

(*pf)는 sub와 같다. 왜냐면 *는 가르키는 것(참조 연선자)로 *pf는 포인터 pf가 가르키는 것. 이라는 뜻이기 때문이다.

 

 


간단한 예제를 살펴보자.

#include <stdio.h>

int add(int, int);
int sub(int, int);

int main(void)
{
    int (*p)(int, int);
    int result;
    
    p = add;
    result = (*p)(10, 20);
    
    printf("%d\n", result); //30출력
    
    p = sub;
    result = (*p)(30, 10);
    
    printf("%d\n", result); //20출력
    
    return 0;
}

int add(int a, int b)
{
    result a + b;
}
int sub(int a, int b)
{
    result a - b;
}

함수 포인터 p를 선언한 후, add함수를 가르키고 인수에 10, 20을 넣는다.

그리고 sub함수를 가르키고 인수에 30, 10을 넣는다.

그리고 값을 출력해본다.

'C프로그래밍 > 개인 공부' 카테고리의 다른 글

함수에서 인자를 포인터로 받으면 무조건 원본 변경이 될까?  (0) 2023.05.17
2차원 배열 포인터 형으로 함수 인자로 전달하기  (0) 2023.02.12
C언어 - 포인터의 배열, 배열의 포인터  (0) 2023.01.05
C언어 - 이중 포인터  (0) 2023.01.03
C언어 - 연결리스트  (0) 2022.12.20
'C프로그래밍/개인 공부' 카테고리의 다른 글
  • 함수에서 인자를 포인터로 받으면 무조건 원본 변경이 될까?
  • 2차원 배열 포인터 형으로 함수 인자로 전달하기
  • C언어 - 포인터의 배열, 배열의 포인터
  • C언어 - 이중 포인터
Minu Jin
Minu Jin
정보의 바다
  • Minu Jin
    뇌 구조가 바이너리
    Minu Jin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    Qualcomm
    앤드류모튼
    커널 기여
    동적메모리
    토발즈
    이진 트리
    버퍼
    피보나치
    리눅스
    스택
    yolo
    드라이버 분석
    rubikpi3
    소수
    자료구조
    시스템콜
    파일 입출력
    Branch
    순환
    포인터
    INIT
    커널
    rubik pi
    arm
    commit
    파이썬
    c언어
    Git
    C++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minu Jin
C언어 - 함수의 포인터
상단으로

티스토리툴바