关于C语言函数指针如何调用函数的问题

本文讨论了在C语言中,如何正确使用函数指针类型变量调用函数,以及在结构体中解引用的疑惑,指出不解引用来调用函数在某些情况下与解引用效果相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看代码时,遇到了以下两种情况:

//声明一个函数指针
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)()这样写么**
}

查阅资料后总结一句话:遇到使用函数指针类型变量调用函数时,解引用和不解引用时一样的效果(求大神指正)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值