Menu
Coddy logo textTech

함수 포인터 호출

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 34번째.

이제 function pointer를 선언하고 function을 할당하는 방법을 알았으므로, 다음 단계는 실제로 해당 pointer를 통해 function을 호출하는 것입니다.

구문은 간단합니다. 일반 함수를 호출할 때와 똑같이 function pointer를 사용합니다:

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

int main() {
    int (*operation)(int, int) = add;
    
    int result = operation(5, 3);  // add(5, 3)을 호출합니다
    printf("%d\n", result);        // 출력: 8
    return 0;
}

pointer 이름 뒤에 인수를 포함한 괄호를 작성하기만 하면 됩니다. C는 자동으로 pointer를 역참조하고 pointer가 가리키는 function을 실행합니다.

(*operation)(5, 3)과 같은 명시적 역참조 구문을 사용할 수도 있지만, 이는 선택 사항이며 덜 일반적입니다. 두 형식 모두 동일한 결과를 생성합니다.

진정한 힘은 pointer를 서로 다른 functions에 재할당할 때 나타납니다:

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

operation = subtract;
result = operation(5, 3);  // 이제 subtract(5, 3)을 호출합니다
printf("%d\n", result);    // 출력: 2

이제 동일한 변수 operation이 완전히 다른 로직을 실행합니다. 런타임에 동작을 교체할 수 있는 이 능력은 C에서 다형성의 기반입니다.

challenge icon

챌린지

쉬움

포인터를 통해 함수를 호출하고 어떤 함수가 실행되는지 바꾸는 연습을 해 봅시다. 런타임에 덧셈과 뺄셈 사이를 전환할 수 있는 간단한 계산기를 만듭니다.

다음과 같은 프로그램을 작성하세요.

  1. 두 개의 함수를 정의합니다.
    • add: 두 개의 int parameters를 taking하고 합을 returning합니다.
    • subtract: 두 개의 int parameters를 taking하고 first에서 second를 뺀 값을 returning합니다.
  2. main에서 두 개의 int parameters를 taking하고 int를 returning하는 functions를 가리킬 수 있는 calc라는 function pointer를 Declare합니다.
  3. 네 개의 inputs를 읽습니다. 두 개의 정수와 두 개의 operation 코드를 읽습니다.
  4. 각 operation 코드에 대해 다음을 수행합니다.
    • appropriate function을 calc에 Assign합니다 (add는 1, subtract는 2).
    • 두 숫자를 사용하여 pointer를 through function을 Call합니다.
    • result를 print합니다.

네 개의 inputs를 받습니다. first number, second number, first operation code (1 또는 2), 그리고 second operation code (1 또는 2)입니다.

Output에는 separate lines에 두 개의 results가 표시되어야 합니다. 같은 두 숫자를 사용해 수행한 각 operation에 대한 result입니다.

15
5

이 예제에서 inputs가 10, 5, 1, 2라면, first operation (code 1)은 10 + 5 = 15를 더하고, 그다음 pointer가 Reassign되며, second operation (code 2)은 10 - 5 = 5를 subtract합니다.

이는 동일한 pointer variable을 calls 사이에 Reassign함으로써 완전히 다른 logic을 실행할 수 있음을 보여 줍니다.

직접 해보기

#include <stdio.h>

// TODO: 여기에 add 함수를 정의하세요


// TODO: 여기에 subtract 함수를 정의하세요


int main() {
    // 입력을 읽습니다
    int num1, num2, op1, op2;
    scanf("%d", &num1);
    scanf("%d", &num2);
    scanf("%d", &op1);
    scanf("%d", &op2);
    
    // TODO: 'calc'라는 함수 포인터를 선언하세요. 이 포인터는 다음을 가리킬 수 있습니다
    // 두 개의 int 매개변수를 받고 int를 반환하는 함수들
    
    
    // TODO: 첫 번째 연산 코드(op1)에 대해:
    // - 적절한 함수를 calc에 할당하세요 (1은 add, 2는 subtract)
    // - 포인터를 통해 함수를 호출하고 결과를 출력하세요
    
    
    // TODO: 두 번째 연산 코드(op2)에 대해:
    // - calc를 적절한 함수로 재할당하세요
    // - 포인터를 통해 함수를 호출하고 결과를 출력하세요
    
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러