我知道 typedef 做了什么,但这个陈述似乎让我感到困惑。
typedef int (*funcptr)();
本声明
funcptr pf1,pf2
这意味着
int (*pf1)(),(*pf2)();
但是然后如何使用pf1
和pf2
在程序中。如何输入这些值。以及它有什么用。
我知道 typedef 做了什么,但这个陈述似乎让我感到困惑。
typedef int (*funcptr)();
本声明
funcptr pf1,pf2
这意味着
int (*pf1)(),(*pf2)();
但是然后如何使用pf1
和pf2
在程序中。如何输入这些值。以及它有什么用。
您typedef
为函数指针定义了一个类型。取一个函数指针的“值”是没有意义的:它是一个指向一段可执行代码的指针;您需要调用它以使其有用。
您通过指针调用函数的方式与您通过名称已知的函数相同,即通过将带括号的参数列表附加到指针。
这是您可以使用pf1
or执行的操作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..