typedef가하는 일을 알고 있지만이 문장은 나에게 수수께끼처럼 보입니다.이 typedef 선언은 무엇을합니까?
typedef int (*funcptr)();
이 선언
funcptr pf1,pf2
수단이
int (*pf1)(),(*pf2)();
그러나 프로그램에 pf1
및 pf2
을 사용하는 방법. 이 값들의 입력 방법. 그리고 그것을 어떻게 사용하고 있습니다.
typedef가하는 일을 알고 있지만이 문장은 나에게 수수께끼처럼 보입니다.이 typedef 선언은 무엇을합니까?
typedef int (*funcptr)();
이 선언
funcptr pf1,pf2
수단이
int (*pf1)(),(*pf2)();
그러나 프로그램에 pf1
및 pf2
을 사용하는 방법. 이 값들의 입력 방법. 그리고 그것을 어떻게 사용하고 있습니다.
typedef
은 함수 포인터의 유형을 정의합니다. 함수 포인터의 "가치"를 취하는 것은 의미가 없습니다 : 실행 가능한 코드의 포인터입니다. 유용하게 사용하려면 호출해야합니다.
함수를 이름으로 알 수있는 함수와 같은 방법으로 포인터를 호출합니다. 즉, 포인터에 괄호로 묶은 매개 변수 목록을 추가하여 함수를 호출합니다. 마지막 네 줄에 doSomething
의 두 호출하면 통과 무엇에 따라 서로 다른 작업을 수행하는 방법을
// These functions return an int and take no parameters.
// They are compatible with funcptr
int function5() {
return 5;
}
int functionAsk() {
int res;
printf("Enter a value: ");
scanf("%d", &res);
return res;
}
// This function does not know what fp1 does, but it can use it
void doSomething(funcptr fp1) {
int res = fp1();
printf("Function returned %d", res);
}
// Here is how you can call doSomething with different function pointers
pf1 = functionAsk;
doSomething(pf1);
pf2 = function5;
doSomething(pf2);
참고 : 여기에
는pf1
또는
pf2
로 수행 할 수있는 첫 번째 호출이를 위해 사용자에게 묻습니다 두 번째 전화는 즉시 5를 반환합니다.
이것은 매우 인공적인 예제 코드이지만 typedef
함수 포인터를 사용하는 방법을 보여줍니다.
#include <stdio.h>
typedef int (*funcptr)();
int return1(void){return 1;}
int return2(void){return 2;}
int main()
{
funcptr pf1, pf2;
pf1 = return1;
pf2 = return2;
printf("%d, %d\n", pf1(), pf2());
return 0;
}
출력 : 1, 2
당신이 그 (것)들을 작성해야하는 함수를 가리 키도록하려는 경우
PF1과 PF2가 ... 이제 함수 포인터 PF1 = yourfunctionname ..