最近在看代码时,遇到了以下两种情况:
//声明一个函数指针
typedef void(*func)(void);
//声明一个结构体
typedef struct _cmd{
char *name;
func callback;
}cmd_t;
//定义一个函数指针数组
func ff = {
fun1,
fun2,
};
//定义一个结构体数组
cmd_t cmd_tbl[]={
{"fun1",fun1},
{"fun2",fun2},
};
void fun1(void){}
void fun2(void){}
void test(void){
func *pfunc = ff;
for(; *pfunc; pfunc++)
**//此处必须使用解引用么,能写成pfunc()么**
(*pfunc)();
}
cmd_t *test1(char * name){
int len = sizeof(cmd_tbl) / sizeof(cmd_tbl[0]);
for(int i = 0; i < len; i++){
if (!strcmp(cmd_tbl[i].name, name))
return &cmd_tbl[i];
}
return 0;
}
void main(void){
//通过函数指针数组调用函数fun1和fun2
test();
//通过结构体调用函数fun1
char *name = "fun1"
pcmd = find_cmd(name);
if(pcmd != 0)
pcmd->callback();**//问题就在这,pcmd->callback是函数指针类型的,此处不应该是*(pcmd->callback)()这样写么**
}
查阅资料后总结一句话:遇到使用函数指针类型变量调用函数时,解引用和不解引用时一样的效果(求大神指正)。