함수 포인터는 함수의 주소를 저장한 다음 함수 포인터를 사용하여 프로그램에서 초기화 함수를 호출할 수 있는 포인터 변수입니다. 함수 포인터를 사용하기 전에 함수의 주소를 할당해야 합니다. 주위의 괄호 (*function_name)는 컴파일러가 function_name이 return_type의 포인터를 반환한다고 생각하기 때문에 중요합니다. 함수 포인터를 선언하는 구문은 함수 선언 구문과 유사합니다. 유일한 차이점은 함수 이름을 사용하는 대신 괄호 () 내에서 포인터 이름을 사용한다는 것입니다. 함수 포인터에 포인터를 삽입하고 다시 읽으십시오 : 해당 예제에서 함수 ID0의 식별자를 호출했습니다. C 및 C++의 함수 포인터를 간단한 주소로 구현할 수 있지만 일반적으로 sizeof(Fx)=sizeof(void*)) C++의 멤버 포인터는 때로는 „지방 포인터“로 구현되며, 일반적으로 간단한 함수 포인터의 크기보다 2~3배 더 큰 크기입니다. 가상 메소드 및 가상 상속[인용 필요]을 다루기 위해 위의 답변은 이미 많은 것을 설명했습니다. 함수 를 반환하는 것으로 시작하겠습니다 우리가 가리키는 기본 함수로 시작하자 : 6) 일반 데이터 포인터와 마찬가지로 함수 포인터는 인수로 전달 될 수 있으며 함수에서 반환 될 수도 있습니다. 예를 들어 래퍼()가 void fun()을 매개 변수로 수신하고 전달된 함수를 호출하는 다음 C 프로그램을 생각해 보십시오. 많은 „순수“ 개체 지향 언어는 함수 포인터를 지원하지 않습니다. 그러나 단일 메서드(멤버 함수)를 정의하는 인터페이스에 대한 참조를 사용하여 이러한 종류의 언어로 유사한 것을 구현할 수 있습니다.

C# 및 Visual Basic.NET과 같은 CLI 언어는 대리자를 통해 형식 안전 함수 포인터를 구현합니다. C의 함수 포인터에 대한 가장 큰 용도 중 하나는 런타임에 선택한 함수를 호출하는 것입니다. 예를 들어 C 런타임 라이브러리에는 정렬중인 두 항목을 비교하기 위해 호출되는 함수에 대한 포인터를 취하는 qsort 및 bsearch라는 두 개의 루틴이 있습니다. 이렇게 하면 사용하려는 기준에 따라 모든 것을 정렬하거나 검색할 수 있습니다. 빨간색 표시 영역은 주소가 교환되고 eax로 저장되는 방법을 보여 주며 있습니다. 그런 다음 eax에 대한 호출 명령이 있습니다. eax함수의 원하는 주소가 포함되어 있습니다. 함수 포인터를 사용하면 C에서 메서드를 에뮬레이트할 수 있습니다. 보시다시피 typedefs를 사용하여 구축하는 것은 매우 쉽습니다. typedefs가 없으면 위의 선언자 규칙이 일관되게 적용되는 것은 어렵지 않습니다. 보시다시피 포인터가 가리키는 부분과 함수가 반환하는 부분을 놓쳤습니다. 선언의 맨 왼쪽에 나타나는 것이고 관심없는 것입니다 : 선언자가 이미 구축되면 끝에 추가됩니다.

c 언어 함수 포인터 예제