2013-09-25 263 views
0

我知道typedef是干什么的,但是这个说法似乎让我感到困惑。这个typedef声明是做什么的?

typedef int (*funcptr)(); 

这个声明

funcptr pf1,pf2 

表示该

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

但随后如何在程序中使用pf1pf2。如何输入这些值。 它有什么用处。

回答

1

您的typedef定义了函数指针的类型。取一个函数指针的“值”没有意义:它是指向一段可执行代码的指针;你需要调用它来使它有用。

您可以通过指针调用一个函数,就像它是一个按名称已知的函数一样,即通过向指针附加一个带括号的参数列表。

这里是你可以用pf1pf2做什么:

// 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); 

注意如何在最后四行的doSomething两次调用执行基于您通过什么不同的任务:第一个呼叫提示用户输入一个入口,而第二个电话立即返回五个。

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 ..