[c] 배열과 함수 포인터

이 블로그에서는 C 프로그래밍에서 배열과 함수 포인터에 대해 알아보겠습니다. 먼저 배열과 함수 포인터의 기본 원리에 대해 설명한 후, 각각의 활용 예시에 대해 살펴보겠습니다.

배열

배열은 동일한 데이터 형식을 가진 여러 변수를 일괄적으로 관리하기 위한 자료 구조입니다. 예를 들어, int형 데이터를 3개 저장하기 위한 배열은 다음과 같이 정의할 수 있습니다.

int numbers[3];

배열의 각 요소는 인덱스를 사용하여 접근할 수 있습니다. 인덱스는 0부터 시작하며, 아래와 같이 요소에 접근할 수 있습니다.

numbers[0] = 1;
int x = numbers[1];

이처럼 배열은 메모리 상에서 연속적으로 배치되므로, 효율적인 데이터 관리에 활용될 수 있습니다.

함수 포인터

함수 포인터는 함수의 주소를 가리키는 포인터입니다. 함수 포인터를 사용하면 런타임 중에 다른 함수를 호출할 수 있으며, 다양한 콜백 함수를 지원하는 데에 유용합니다.

함수 포인터를 선언하는 방법은 다음과 같습니다.

int (*functionPtr)(int, int);

위 예시에서 functionPtr은 두 개의 int 값을 인자로 받고 int 값을 반환하는 함수를 가리키는 함수 포인터입니다.

함수 포인터를 사용하여 다른 함수를 가리키게 하려면 해당 함수의 이름을 단순히 사용하면 됩니다.

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

functionPtr = &add; // 또는 functionPtr = add;
int result = functionPtr(3, 4); // result는 7

이처럼 함수 포인터를 사용하면 동적인 함수 호출이 가능하며, 이러한 유연성은 다양한 프로그래밍 상황에서 유용하게 활용됩니다.

배열과 함수 포인터의 결합

배열과 함수 포인터를 결합할 수도 있습니다. 예를 들어, 함수 포인터 배열을 사용하면 여러 개의 서로 다른 함수를 동적으로 호출할 수 있습니다. 또한, 배열을 사용하여 함수를 관리할 수도 있습니다.

예시 코드는 다음과 같습니다.

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

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

int (*funcPtrArray[2])(int, int) = {&add, &subtract};
int result1 = funcPtrArray[0](3, 4); // result1은 7
int result2 = funcPtrArray[1](3, 4); // result2는 -1

위 예시에서 funcPtrArray는 두 개의 함수 포인터를 담고 있으며, 각 함수 포인터를 사용하여 다른 함수를 호출합니다.

마무리

배열과 함수 포인터는 C 프로그래밍에서 매우 유용한 기능으로, 다양한 프로그래밍 상황에서 활용될 수 있습니다. 배열을 사용하여 데이터를 효율적으로 관리하고, 함수 포인터를 사용하여 동적인 함수 호출을 지원하는 등의 활용 방법을 숙지하여, 보다 효율적이고 유연한 프로그램을 개발할 수 있습니다.

참고 문헌: GeeksforGeeks

이상으로 배열과 함수 포인터에 대한 블로그 포스트를 마치도록 하겠습니다. 감사합니다.