c언어 포인터 배열 함수 예제

Posted on

C에서는 일반 데이터 포인터 (int *, char *등)와 마찬가지로 함수에 대한 포인터를 가질 수 있습니다. 다음은 함수 포인터를 사용하여 선언 및 함수 호출을 보여 주는 간단한 예제입니다. 다음 그림은 위의 프로그램에 사용된 3D 배열이 메모리에 저장되는 방법을 보여 주며 있습니다. 명령 int (*ope[4])(int, int); 함수 포인터의 배열을 정의합니다. 각 배열 요소에는 동일한 매개 변수와 반환 형식이 있어야 합니다. 이 주제에 대해 C/C++ 프로그래머와 이야기할 때 함수 포인터를 사용하지 않는 데는 일반적으로 세 가지 이유가 있습니다. 그들은 : 이제 우리는 포인터 산술에 대해 논의 할 준비가되어 있습니다. 포인터에 정수 값을 추가하고 뺄 수 있습니다. myArray가 일부 배열 유형으로 선언된 경우 j가 정수인 myArray[j]의 식 *(myArray+j)은 해당합니다.

예를 들어 위의 예에서 두 번째 Array[i].num2라는 표현식이 있는 경우 *(secondArray+i).num2 이상으로 작성할 수 있습니다(secondArray+i)->num2. 여기서 ptr은 10개의 정수 배열을 가리킬 수 있는 포인터입니다. 하위 스크립트는 간접보다 우선 순위가 높기 때문에 괄호 안에 간접 연산자와 포인터 이름을 둘러싸야 합니다. 여기서 ptr의 유형은 `10개의 정수 배열에 대한 포인터`입니다. 참고 : 배열의 0 요소를 가리키는 포인터와 전체 배열을 가리키는 포인터는 완전히 다릅니다. 다음 프로그램은 이를 보여 주며, 이 예제에서는 const의 5개 발생률과 정적 중 하나를 단일 선언으로 결합합니다. 그러나 모든 복잡성에 대해 이것은 인위적인 예가 아닙니다. 모든 const 및 정적 선언을 제거하고 코드가 계속 작동할 수 있습니다.

그러나 훨씬 덜 안전하고 잠재적으로 효율성이 떨어지는 것입니다. C는 함수에 대한 포인터를 만들 수도 있습니다. 함수 구문에 대한 포인터는 다소 지저분할 수 있습니다. 이 예제에서는 다음 함수를 고려합니다. 마찬가지로 배열의 한 요소만 있는 대신 전체 배열을 가리킬 수 있는 포인터를 선언할 수도 있습니다.