| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1502 人关注过本帖
标题:(*(void(*)())0)(); and void(*signal(int, void(*)(int)))(int);
只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:10 
(*(void(*)())0)(); and void(*signal(int, void(*)(int)))(int);
void(*signal(int, void(*)(int)))(int);
(*(void(*)())0)();  


路过的各位大佬帮忙解释下这两行代码把。。。。。
定当临表涕零,不胜感激。
搜索更多相关主题的帖子: void and int 两行 不胜感激 
2018-05-20 16:03
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
第一个,

1--先把singal看成一个整体,是个指针函数参数类型是int,无返回值
2--然后再singal的构成
singal本身也是一个指针函数,它有两个参数,第一个参数是int型,第二个参数是一个无返回值只有一个int参数的指针函数~
这个函数的返回值就是1所指的指针函数~

综合来说连在一起再解释一次就是,singal它是一个指针函数,该指针函数有两个参数,第一个参数是int,第二个参数是一个无返回值只有一个int的指针函数,该函数的返回值是一个指针函数,该返回值的指针函数无返回值,只有一个参数int

这样安排数据类型可能是把singal里面的指针函数作为返回值再调用一次,没有试过是不是这样用 (*(*singal(1,f1)))(2);

typedef一下就清晰了~

typedef  void (*)( int ) F;

那就是   F single(int,F);



第二个~
这个比第一个要好解释~
把0强制转型为一个无参数无返回值的指针函数,然后把0作为该地址调用~

typedef一下就是

typedef void (*)( void ) F;

  (*(F)0)();

这样就是了~



[此贴子已经被作者于2018-5-20 19:20编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-20 17:41
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
大概就是这样~

程序代码:
#include<stdio.h>

void f_print( int );
void (f( int,void (*)( int ) ))( int );

int main( void )
{
    void ((*p)( int,void (*)( int )))( int )=f;
    
    p(1,f_print)(2);
    
    return 0;
}

void f_print( int k )
{
    printf("%d\n",k);
}

void (f( int s,void (*_f)( int ) ))( int )
{
    _f(s);
    
    return _f;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-20 18:11
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 2楼 九转星河
综合来说连在一起再解释一次就是,singal它是一个指针函数,该指针函数有两个参数,第一个参数是int,第二个参数是一个无返回值只有一个int的指针函数,该函数的返回值是一个指针函数,该返回值的指针函数无返回值,只有一个参数int
void(*signal(int, void(*)(int)))(int);
第二个参数不应该是函数的指针?*的两侧有()包含不应该是函数的指针嘛
2018-05-20 20:01
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 3楼 九转星河
好的谢谢
2018-05-20 20:04
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 4楼 花脸
可以理解成是一个指针,那个指针是函数类型的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-20 21:32
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 6楼 九转星河
恩好的谢谢。
2018-05-20 22:02
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:10 
C 有 typedef
C++ 11 有 using
赶紧去打死写出这种代码的人 (滑稽
这种代码建议从内往外读就非常简单了, 2 楼回答的非常清晰了
2018-05-20 22:14
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 8楼 Jonny0201
using namespace std?
2018-05-21 10:48
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
回复 9楼 花脸
typedef void (*)( void ) F;
用这个举例子
在 C++ 11 里面的做法就是
using F = void(*)();
2018-05-21 11:35
快速回复:(*(void(*)())0)(); and void(*signal(int, void(*)(int)))(int) ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053109 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved