본문 바로가기
프로그래밍 언어/C 언어

[C] 함수 포인터와 void 포인터

by 까망 하르방 2021. 3. 20.
반응형

함수 포인터 변수

메모리상에 저장된 함수의 주소 값을 포인터 변수

변수뿐만 아니라 함수들도 바이너리 형태로 메모리 공간에 조장되어 호출 · 실행

 

배열의 이름과 마찬가지로 함수의 이름도 함수가 저장된 메모리 공간의 주소 값을 의미.

함수 이름의 포인터 형은 함수의 반환형과 매개변수의 선언을 통해서 결정짓도록 약속.

int  testFunc(int x){...}

: 반환형(int) / 매개변수(int형 1개)

▷ int(*fptr)(int) = testFunc;

 

void sampleFunc(int x, int y){...}

: 반환형(void) / 매개변수(int형 2개)

▷ void(*fptr)(int, int) = sampleFunc;

 

함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언

형태가 같은 서로 다른 기능의 함수를 선택적으로 사용할 수 있습니다.

#include <stdio.h>

int add(int a, int b){
    return a + b;
}

int sub(int a, int b){
    return a - b;
}

int main(void){
    int (*fp)(int, int) = add;
    printf("%d\n", fp(10, 3)); // 13
    
    fp = sub;
    printf("%d\n", fp(10, 3)); // 7
}

 

함수 포인터 반환

#include <stdio.h>

int add(int a, int b){
    return a + b;
}

int(*process(char *a))(int, int){
    printf("%s\n", a);
    return add;
}

int main(void){
    printf("%d\n", process("10과 20을 더해보겠습니다.")(10, 20));
}

 

[또 다른 예제]

#include <stdio.h>

int whoIsFirst(int age1, int age2, int (*cmp)(int, int)) {
    return cmp(age1, age2);
}

int olderFirst(int age1, int age2) {
    return age1 >= age2 ? age1 : age2;
}

int youngerFirst(int age1, int age2) {
    return age1 >= age2 ? age2 : age1;
}

int main(void) {
    int age1 = 10, age2 = 20, first;

    first = whoIsFirst(age1, age2, olderFirst);
    printf("%d\n", first); // 20

    first = whoIsFirst(age1, age2, youngerFirst);
    printf("%d\n", first); // 10
}

 

 

 

 

 

반응형

'프로그래밍 언어 > C 언어' 카테고리의 다른 글

[C] typedef enum 활용  (0) 2021.09.11
[C] 로그(log) 함수  (0) 2021.09.01
[C] 포인터의 포인터(이중 포인터)  (0) 2021.03.20
[C] 포인터 변수 개념  (0) 2021.03.20
[C] 다차원 배열과 포인터 관계  (0) 2021.03.20

댓글