俩个有趣代码( * ( void( * )( ) ) 0 )( )和void( *signal( int,void ( * )( int ) ) )( int )的意义
题目的在这俩个代码是不是咋一眼看起来非常的繁重和不解其意,接下来我就跟你说道说道这俩个有趣的代码。
一:( * ( 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 )的意义相关推荐
- a href=#与 a href=javascript:void(0) 的差别
a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...
- a href=javascritp:void(0)的用法
转自:http://speed-guo.iteye.com/blog/1003496 1. <a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 # ...
- javascript:void(0)和javascript:;的用法
一.JavaScript:void(0) 我们经常会使用到 javascript:void(0) 这样的代码,那么在 JavaScript 中 javascript:void(0) 代表的是什么意思呢 ...
- javascript:void(0);用法及常见问题解析
void 操作符用法格式: javascript:void (expression) 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javasc ...
- a href=#与 a href=javascript:void(0) 的区别
a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP<a href="javascript:void(0)" onCli ...
- a href=# 与 a href=javascript:void(0) 的区别
"#"包含了一个位置信息 默认的锚点是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#可是跳动到 ...
- “ void 0”是什么意思? [重复]
本文翻译自:What does `void 0` mean? [duplicate] This question already has answers here : 这个问题已经在这里有了答案 : ...
- a标签href=”javascript;void(0)
href="javascript:void(0)" href="javascript:void(0)"这个的含义是,让超链接去执行一个js函数,而不是去跳转到一 ...
- javascript:void(0)用法及常见问题解析
使用过ajax的朋友经常会见到这样的代码:here,这里面的void是一个操作符,该操作符指定要计算一个表达式但是不返回值.javascript:void(0) 在某些情况下会有浏览器不兼容的bug. ...
最新文章
- phpredis5.6在win10下的安装
- Net基础篇_学习笔记_第十一天_面向对象(类)
- 【图神经网络】基于GNN的不同变种及其应用
- Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)3
- 计算机队列概念,2020计算机专业考研数据结构知识点:栈、队列和数组
- 在阿里云服务器上安装docker
- 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...
- CRLF line terminators导致shell脚本报错:command not found --转载
- Android SDK Manager 中如果没有相应的镜像ARM XX Image
- QT拖动界面的鼠标事件
- 【转】运用jieba库分词
- 贪吃蛇c语言源代码彩色版,贪吃蛇C语言源代码
- Java setlocale方法_Java Locale.Builder setLocale(Locale)用法及代码示例
- 差分电荷密度怎么画_VASP的差分电荷密度计算及图像处理
- 最优化理论极简入门(第一部分):最优化条件和KKT条件
- 自用PTA题目记录0024
- 【Web接口测试_基础概念】接口概念、接口分类、接口定义、接口规范、接口方法、接口用例设计整理
- matlab中size函数使用
- linux上设置别名alias(快速便捷打开文件)
- linux系统是什么意思
热门文章
- 怎样检查笔记本电池使用情况?
- mysql性能升级方案_使用FriendFeed来提升MySQL性能的方法
- 效用分析 ( 效能分析、Power analysis)是什么?效用分析在线计算器介绍(分析样本量、效用和效应量之间的关系时,需要把其中一个因素固定,计算另外两个因素间的关系、或者给定两个因素计算第三个
- Python笔记— reversed()函数
- QT 实现自定义小窗口可拖拽移动,自定义类绑定鼠标点击事件(图形操作一)
- Jupyter 主题设置
- 大阴回调通达信公式,还是比较安全的位置,副图+选股 源码分享
- 2021年InfoWorld 精选最佳开源软件
- 消防工程师 1.2 室外消火栓系统
- 火焰特效消防安全视频PR片头模板