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언어 - 이중 포인터
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch N
        • Cortex-M N
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Web
      • Linux
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
      • Qualcomm 기업과제
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    버퍼
    포인터
    순환
    rubikpi
    소수
    과속탐지
    aapcs
    yolo
    백준
    thumb2
    INIT
    커널
    ptrace
    rubikpi3
    파일 입출력
    arm
    이진 트리
    Qualcomm
    자료구조
    파이썬
    피보나치
    commit
    Git
    권머현
    C++
    동적메모리
    rubik pi
    c언어
    스택
    Branch
  • 최근 댓글

  • 최근 글

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

티스토리툴바