C에서 함수 포인터의 배열을 정의하는 방법
질문이 하나 있는데요.함수 포인터의 배열을 동적으로 정의하려고 합니다.calloc
그런데 구문을 어떻게 쓰는지 모르겠어요.정말 감사해요.
함수 포인터의 유형은 함수 선언과 동일하지만 함수 이름 대신 "*"가 있습니다.그래서 포인터:
int foo( int )
다음과 같습니다.
int (*)( int )
이 유형의 인스턴스 이름을 지정하려면 별 뒤에 (*) 안에 이름을 입력합니다.이렇게 하려면 다음과 같이 하십시오.
int (*foo_ptr)( int )
foo_ptr이라는 변수를 선언합니다.이러한 유형의 함수를 가리킵니다.
배열은 변수 식별자 근처에 대괄호를 배치하는 일반적인 C 구문을 따릅니다.따라서 다음과 같습니다.
int (*foo_ptr_array[2])( int )
foo_ptr_array라는 변수를 선언합니다.이 변수는 2개의 함수 포인터의 배열입니다.
구문이 매우 복잡해질 수 있으므로 함수 포인터에 typedef를 작성하고 대신 이들 배열을 선언하는 것이 더 쉽습니다.
typedef int (*foo_ptr_t)( int );
foo_ptr_t foo_ptr_array[2];
두 샘플 모두 다음과 같은 작업을 수행할 수 있습니다.
int f1( int );
int f2( int );
foo_ptr_array[0] = f1;
foo_ptr_array[1] = f2;
foo_ptr_array[0]( 1 );
마지막으로 다음 중 하나를 사용하여 어레이를 동적으로 할당할 수 있습니다.
int (**a1)( int ) = calloc( 2, sizeof( int (*)( int ) ) );
foo_ptr_t * a2 = calloc( 2, sizeof( foo_ptr_t ) );
함수 포인터에 대한 포인터로서 a1을 선언하려면 첫 번째 줄에 추가 *를 추가합니다.
여기 도움이 될 만한 작은 예를 하나 들겠습니다.
typedef void (*fp)(int); //Declares a type of a void function that accepts an int
void test(int i)
{
printf("%d", i);
}
int _tmain(int argc, _TCHAR* argv[])
{
fp function_array[10]; //declares the array
function_array[0] = test; //assings a function that implements that signature in the first position
function_array[0](10); //call the cuntion passing 10
}
함수 포인터의 배열을 다음과 같이 선언합니다.
T (*afp[N])();
어떤 종류에서는T
어레이를 동적으로 할당하기 때문에 다음과 같은 작업을 수행할 수 있습니다.
T (**pfp)() = calloc(num_elements, sizeof *pfp);
또는
T (**pfp)() = malloc(num_elements * sizeof *pfp);
그런 다음 각 함수를 다음과 같이 부릅니다.
T x = (*pfp[i])();
또는
T x = pfp[i](); // pfp[i] is implicitly dereferenced
비정통적으로 하려면 함수에 대한 포인터 배열에 대한 포인터를 선언한 후 다음과 같이 할당할 수 있습니다.
T (*(*pafp)[N])() = malloc(sizeof *pafp);
다만, 콜을 발신할 때는 어레이 포인터를 참조할 필요가 있습니다.
x = (*(*pafp)[i])();
typedef R (*fptr)(A1, A2... An);
여기서 R은 반환 타입, A1, A2...an은 인수 유형입니다.
fptr* arr = calloc(num_of_elements,sizeof(fptr));
모든 기능이 유형이라고 가정합니다.void ()(void)
뭐 이런 거.
typedef void (*fxptr)(void);
fxptr *ptr; // pointer to function pointer
ptr = malloc(100 * sizeof *ptr);
if (ptr) {
ptr[0] = fx0;
ptr[1] = fx1;
/* ... */
ptr[99] = fx100;
/* use "dynamic array" of function pointers */
free(ptr);
}
언급URL : https://stackoverflow.com/questions/5488608/how-define-an-array-of-function-pointers-in-c
'programing' 카테고리의 다른 글
Firebase 및 Firebase를 갖춘 Nuxt 미들웨어UI: 오류: 네비게이션 가드를 통해 "/anything"에서 "/login"으로 이동할 때 방향 수정됨 (0) | 2022.10.02 |
---|---|
Java 7 컴파일 코드를 Java 8로 업그레이드하면 어떤 이점이 있습니까? (0) | 2022.10.02 |
네트워크란?ERR_HTTP2_PROTOCOL_ERROR 정보 (0) | 2022.10.02 |
데이터베이스에서 행 순서 필드를 보다 효율적으로 유지 관리할 수 있는 방법 (0) | 2022.10.02 |
Java에서는 16진수까지의 정수 (0) | 2022.10.02 |