我知道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
定义了函数指针的类型。取一个函数指针的“值”没有意义:它是指向一段可执行代码的指针;你需要调用它来使它有用。
您可以通过指针调用一个函数,就像它是一个按名称已知的函数一样,即通过向指针附加一个带括号的参数列表。
这里是你可以用pf1
或pf2
做什么:
// 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
两次调用执行基于您通过什么不同的任务:第一个呼叫提示用户输入一个入口,而第二个电话立即返回五个。
这是一个非常人造的示例代码,但它说明了如何使用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 ..