(* (void ( * )() 0 ) ()说明和由来

先看看类型转换符:

如声明float  (* h) ( ) ;表示h是一个指向返回值为浮点类型的函数的指针,因此:  (float ( * ) ( ) )表示一个“指向返回值为浮点类型的函数的指针”的类型转换符。

(* (void ( * )( ) 0 ) ( );表示什么呢?

很简单的可以看出 (void ( * )( ) 表示一个类型转换符,那么(void ( * )( )0,就是把地址0转换为一个函数指针类型,“指向返回值为void类型的函数的指针”,我们用fp替代一下(void ( * )( )0,得到(* fp )( )。这是对一个函数的调用。

可以简单地看看(* fp )( );  因为fp是一个函数指针,那么*fp就是该指针所指向的函数,所以(*fp ) ( )就是调用该函数的方式。ansi c标准允许简写为fp( ),但这仅仅是一种简写。

注意:如果写成*fp();那么*fp()实际上与*(fp() )的含义完全一样,ansi c把它作为* ((* fp) ( ) )的简写。

如果fp是一个指向返回值为void类型的函数指针,那么:

void (*fp) ( );

因此,将常数0转换为“指向返回值为void的函数的指针”的类型,可以这样写:(void ( * ) ( ) ) 0

因此可以用(void ( * ) ( ) ) 0 来代替fp,从而得到(* (void ( * )( ) 0 ) ( );表示调用存储位置为0的子函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值