( *( void (*) ( ) ) 0 ) ( ) ; 到底是什么东东???!!!

本文探讨了C语言中一个复杂的函数指针表达式`( *(void (*)()) 0 ) ();`,该表达式试图调用内存地址0处的函数。源自《C陷阱与缺陷》一书,它展示了指针操作的复杂性和潜在问题。通过逐步分析和类型转换,解释了如何理解和使用函数指针,强调了正确理解和应用此类表达式的重要性。
摘要由CSDN通过智能技术生成

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

到底是什么?这个出自<<C陷阱与缺陷>> 这本书,可以下去搜索一下,我也是今天才看到这个例子,作为初学者,这个列子很好的带领我们重新回顾了指针的操作

也体现出指针的博大精深"也可以说为一种缺陷",因为他总是让人难理解(至少我目前这个阶段是这样)

这个语句的意思是 调用首地址为0位置的子例程

这个语句应该出现在独立运行于某种微处理器的程序中,而不是我们普通Pc机上.

这样的函数让我这个萌新是很懵逼的,慢慢往后看解释,才理解了这个语句.
首先,要理解这种,就要理解变量的声明

举几个例子:

  float   f;
  float   f();
  float   *f;
  float   *f();
  float   (*f)();

看到这些列子你可以停下观看,写下来对这些声明,再回来看

float f;

声明含义是:对其求值时,表达式f(也就是变量)的类型为浮点数类型(float)

float   f();

声明的含义是:表达式ff() (也就是函数ff)求值的结果是一个浮点数,也就是说ff是一个返回值为float类型的函数

float   *f;

声明的含义是:*f是一个浮点数,也就是说pf是一个指向浮点数的指针

float   *f();

从运算关系上来看 () 符号优先级高于 * 这个符号,所以f先和()结合,也可以写成 *(f()), f()和<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值