详解C/C++函数指针声明 ( *( void(*)())0)();

本文深入探讨了C语言中指针与函数的高级应用,包括函数指针、函数作为参数传递、返回值为函数的指针等概念。详细解释了如何通过类型转换符和函数指针实现复杂的功能调用,提供了理解C语言底层机制的关键知识点。

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

 ( *( void(*)())0)();

float
*pf; 这个声明的含义是*pf是一个浮点数,也就是说,pf是一个指向浮点数的指针。 float *g() , (*h)(); 表示*g()与(*h)()是浮点表达式。因为()结合优先级高于*,*g()也就是*(g()):g是一个函数,该函数的返回值类型为指向浮点数的指针。同理,可以得出h是一个函数指针,h所指向函数的返回值为浮点类型。 float (*h)(); 表示h是一个指向返回值为浮点类型的函数的指针,因此, (float (*)()) 表示一个“指向返回值为浮点类型的函数的指针”的类型转换符。 第一步,假定变量fp是一个函数指针,那么如何调用fp所指向的函数呢?调用方法如下:(*fp)(); 因为fp是一个函数指针,那么*fp就是该指针所指向的函数,所以(*fp)()就是调用该函数的方式。 表达式(*fp)()中,*fp两侧的括号非常重要,因为函数运算符()的优先级高于单目运算符*。如果*fp两侧没有括号,那么*fp()实际上与*(fp())的含义完全一致。 (*0)() 上式并不能生效,因为运算符*必须要一个指针来做操作数。而且这个指针还应该是一个函数指针,这样经运算符*作用后的结果才能作为函数被调用。因此,在上式中必须对0作类型转换,转换后的类型可以大致描述为:“指向返回值为void类型的函数的指针”。 因此,将常数0转型为“指向返回值为void的函数的指针”类型,可以这样写: (void (*)())0 当然,我们用typedef来解决这个问题能够表述更加清晰: 1 2 typedef void (*fp)();//声明一个函数指针类型fp (*(fp)0)();//对0转换为函数指针类型,*(函数指针)就是函数本身,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值