这个typedef声明有什么作用?

时间:2013-09-25 13:06:07

标签: c pointers function-pointers typedef

我知道typedef的作用,但这句话似乎令我感到困惑。

typedef int (*funcptr)();

此声明

funcptr pf1,pf2

意味着这个

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

但是如何在程序中使用pf1pf2。如何输入这些值。 它的用途是什么。

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:1)

pf1和pf2现在是函数指针...如果你想让它们指向一个函数你应该写pf1 = yourfunctionname ..