[c] 배열과 함수 포인터

배열과 함수 포인터는 C 프로그래밍에서 매우 중요한 요소입니다. 이 두 가지 요소를 이해하면 코드를 효율적으로 작성할 수 있고, 복잡한 문제를 간단하게 해결할 수 있습니다.

배열(Array)

배열은 동일한 데이터 형식의 여러 값을 보관하는 데 사용됩니다. 예를 들어, int 형식의 정수들을 보관하는 배열은 다음과 같이 선언됩니다.

int myArray[5];

이는 5개의 int 값을 저장할 수 있는 배열을 생성합니다. 배열은 0부터 시작하는 인덱스를 가지며, 각 요소에는 myArray[0], myArray[1], myArray[2]와 같이 접근할 수 있습니다.

함수 포인터(Function Pointer)

함수 포인터는 함수의 주소를 저장하고 호출하는 데 사용됩니다. 함수 포인터를 사용하면 실행 중에 어떤 함수를 호출할 지 결정할 수 있습니다. 함수 포인터는 다음과 같이 선언됩니다.

int (*funcPtr)(int, int);

위의 예시는 두 개의 int 인자를 받고 int 값을 반환하는 함수를 가리키는 포인터를 선언합니다. 함수 포인터를 사용하면 프로그램이 실행 중에 동적으로 함수를 선택하고 호출할 수 있습니다.

예제

이 두 가지 요소를 함께 사용하는 예제를 살펴보겠습니다. 다음은 배열에 저장된 함수 포인터들을 사용하여 간단한 계산기 프로그램을 구현하는 코드입니다.

#include <stdio.h>

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

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

int multiply(int a, int b) {
    return a * b;
}

int divide(int a, int b) {
    return a / b;
}

int main() {
    int (*funcPtr[4])(int, int) = {add, subtract, multiply, divide};
    int choice, a, b;

    printf("Enter two numbers: ");
    scanf("%d %d", &a, &b);

    printf("Enter operation (0:add, 1:subtract, 2:multiply, 3:divide): ");
    scanf("%d", &choice);

    if (choice >= 0 && choice <= 3) {
        int result = funcPtr[choice](a, b);
        printf("Result: %d\n", result);
    } else {
        printf("Invalid choice\n");
    }

    return 0;
}

위의 코드는 더하기, 빼기, 곱하기, 나누기 함수를 배열에 저장하고, 사용자로부터 선택받은 연산을 해당 함수 포인터를 사용하여 수행하는 프로그램입니다.

마치며

배열과 함수 포인터는 C 프로그래밍에서 강력한 기능을 제공합니다. 제대로 이해하고 활용할 수 있다면, 여러 가지 복잡한 상황에서도 간결하고 효율적인 코드를 작성할 수 있습니다.