题目的在这俩个代码是不是咋一眼看起来非常的繁重和不解其意,接下来我就跟你说道说道这俩个有趣的代码。

一:( * ( void( * )( ) 0 ) ( )

要想知道一个代码的意义,首先得分析这个代码的类型是什么,但是这个代码我们一眼并不能看出来是什么类型的代码,所以我们就得找到一个突破口,这个突破口是什么,就是中间有一个我们熟悉的函数指针类型void( * )( ),而这个函数指针类型修饰的是0,而0是什么,其实0就是一个数字0,我们再仔细观察一下,void( * )( )外面被一个()包起来( void( * )( ) ),而我们也知道强制类型转换的格式就是用()括类型起来然后再修饰   如:(int)a; 所以可以推断出来( void( * )( ) )0就是将0强制类型转换成函数指针。

知道了这个之后我们就能很清晰的分析这是个什么代码了,把( void( * )( ) ) 0暂时忽视之后是这个样子(*)(),所以这个代码的意思就是将0强制转换为函数指针的地址,然后再解引用0。可以你会疑惑void前面的*是干嘛的,这个*就只是做提示作用的标识符,如有疑惑可以去看我的函数指针那篇,里面有详细讲解。https://blog.csdn.net/weixin_74442752/article/details/129270528?spm=1001.2014.3001.5502e

二:void( *signal( int,void ( * )( int ) ) )( int )

刚刚也说了,要理解一个代码的意思,首先得知道这个代码的类型是什么,先不看中间部分,只看结构,void(*)(),可以看出来是一个函数指针,然后再看里面的内容,(*signal(int,void(*)(int),signal很明显是一个函数名称,( int,void ( * )( int ) )里的int和void ( * )( int )是signal函数里的参数,void(*)(int)是一个函数指针,好的,将每个部分都分析完之后就要合在一起看,因为viod(*)()是一个函数指针,如果是定义一个函数指针的话,那么(*)里面的应该是函数指针的名称,而signal很明显不是名称,而是一个函数,所以这并不是在定义一个指针函数,那这个到底是什么呢,其实这是声明了一个函数signal,因为你看,signal是一个函数,里面参数是int和viod(*)(),那返回类型是什么呢,当我们不看里面的signal后就能发现,返回类型是void(*)(int),返回类型有了,函数有了,所以这不就是一个函数声明吗。

如果这样你不太理解,我们可以把它变成void(*)(int)signal (int,void(*)(int)),这么看是不是好理解多了呢,但是语法不支持这么写,因为它的返回类型是函数指针,而要写函数指针的话(*)这个*就必须得挨着名称signal。

我们还可以利用typedef来对函数指针类型重定义,比如:

typedef void(*hszz)(int);
hszz signal(int,hszz);

typeder是用来重定义一个类型的,就是将一个类型的名称换成你想换的,比如:

typedef unsigned char unch;
unch arr[10]="abcdefgh"

所以这个代码其实就是一个函数声明。

俩个有趣代码( * ( void( * )( ) ) 0 )( )和void( *signal( int,void ( * )( int ) ) )( int )的意义相关推荐

  1. a href=#与 a href=javascript:void(0) 的差别

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...

  2. a href=javascritp:void(0)的用法

    转自:http://speed-guo.iteye.com/blog/1003496 1. <a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 # ...

  3. javascript:void(0)和javascript:;的用法

    一.JavaScript:void(0) 我们经常会使用到 javascript:void(0) 这样的代码,那么在 JavaScript 中 javascript:void(0) 代表的是什么意思呢 ...

  4. javascript:void(0);用法及常见问题解析

    void 操作符用法格式: javascript:void (expression) 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javasc ...

  5. a href=#与 a href=javascript:void(0) 的区别

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP<a href="javascript:void(0)" onCli ...

  6. a href=# 与 a href=javascript:void(0) 的区别

    "#"包含了一个位置信息 默认的锚点是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#可是跳动到 ...

  7. “ void 0”是什么意思? [重复]

    本文翻译自:What does `void 0` mean? [duplicate] This question already has answers here : 这个问题已经在这里有了答案 : ...

  8. a标签href=”javascript;void(0)

    href="javascript:void(0)" href="javascript:void(0)"这个的含义是,让超链接去执行一个js函数,而不是去跳转到一 ...

  9. javascript:void(0)用法及常见问题解析

    使用过ajax的朋友经常会见到这样的代码:here,这里面的void是一个操作符,该操作符指定要计算一个表达式但是不返回值.javascript:void(0) 在某些情况下会有浏览器不兼容的bug. ...

最新文章

  1. phpredis5.6在win10下的安装
  2. Net基础篇_学习笔记_第十一天_面向对象(类)
  3. 【图神经网络】基于GNN的不同变种及其应用
  4. Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)3
  5. 计算机队列概念,2020计算机专业考研数据结构知识点:栈、队列和数组
  6. 在阿里云服务器上安装docker
  7. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...
  8. CRLF line terminators导致shell脚本报错:command not found --转载
  9. Android SDK Manager 中如果没有相应的镜像ARM XX Image
  10. QT拖动界面的鼠标事件
  11. 【转】运用jieba库分词
  12. 贪吃蛇c语言源代码彩色版,贪吃蛇C语言源代码
  13. Java setlocale方法_Java Locale.Builder setLocale(Locale)用法及代码示例
  14. 差分电荷密度怎么画_VASP的差分电荷密度计算及图像处理
  15. 最优化理论极简入门(第一部分):最优化条件和KKT条件
  16. 自用PTA题目记录0024
  17. 【Web接口测试_基础概念】接口概念、接口分类、接口定义、接口规范、接口方法、接口用例设计整理
  18. matlab中size函数使用
  19. linux上设置别名alias(快速便捷打开文件)
  20. linux系统是什么意思

热门文章

  1. 怎样检查笔记本电池使用情况?
  2. mysql性能升级方案_使用FriendFeed来提升MySQL性能的方法
  3. 效用分析 ( 效能分析、Power analysis)是什么?效用分析在线计算器介绍(分析样本量、效用和效应量之间的关系时,需要把其中一个因素固定,计算另外两个因素间的关系、或者给定两个因素计算第三个
  4. Python笔记— reversed()函数
  5. QT 实现自定义小窗口可拖拽移动,自定义类绑定鼠标点击事件(图形操作一)
  6. Jupyter 主题设置
  7. 大阴回调通达信公式,还是比较安全的位置,副图+选股 源码分享
  8. 2021年InfoWorld 精选最佳开源软件
  9. 消防工程师 1.2 室外消火栓系统
  10. 火焰特效消防安全视频PR片头模板