2013-09-25 4 views
0

typedef가하는 일을 알고 있지만이 문장은 나에게 수수께끼처럼 보입니다.이 typedef 선언은 무엇을합니까?

typedef int (*funcptr)(); 

이 선언

funcptr pf1,pf2 

수단이

int (*pf1)(),(*pf2)(); 

그러나 프로그램에 pf1pf2을 사용하는 방법. 이 값들의 입력 방법. 그리고 그것을 어떻게 사용하고 있습니다.

답변

1

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를 반환합니다.

1

이것은 매우 인공적인 예제 코드이지만 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 당신이 그 (것)들을 작성해야하는 함수를 가리 키도록하려는 경우

1

PF1과 PF2가 ... 이제 함수 포인터 PF1 = yourfunctionname ..

관련 문제