| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 865 人关注过本帖
标题:遇到一超恐怖的声明,看大家能不能读懂
只看楼主 加入收藏
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
遇到一超恐怖的声明,看大家能不能读懂
今早起来看书,遇到一个超超级吓人的声明,如下:
void (*signal(int sig,void(*func)(int)))(int);
吓我一跳啊,当然书上就有答案,看看兄弟们谁能看懂这个声明,当然几位大牛就算了,肯定是小意思的
搜索更多相关主题的帖子: 声明 小意思 
2012-12-29 09:10
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3451
专家分:19340
注 册:2012-3-31
收藏
得分:2 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-12-29 09:16
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3451
专家分:19340
注 册:2012-3-31
收藏
得分:0 
学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-12-29 09:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:2 
这玩意儿很简单呀,一层层的剥皮
void (*signal(int sig,void(*func)(int)))(int);
就剥成了
外层的 void (*)(int);
和内层的 signal( int sig, void(*func)(int) )
也就是 signal 这个函数,第二个参数是 void (*)(int) 类型,返回值类型也是 void (*)(int)
而 void (*)(int) 就是一个扑通的函数指针
2012-12-29 10:12
额外覆盖
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:城市猎人
威 望:6
帖 子:1726
专家分:5757
注 册:2012-9-22
收藏
得分:2 
原来函数指针也能作参数,学习了!

我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2012-12-29 10:22
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
额外同学,见到了吧,我看到时刻真下了一跳,“这啥玩意啊,这长一串”,研究啦半天啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-29 10:35
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:2 
程序代码:
我只能分析到这里了,继续关注

//void (*signal(int sig,void(*func)(int)))(int);
typedef void (*PFUN1)(int);
typedef void (*PFUN2)(int sig, void(*func)(int));

void Test1(int n)
{
    printf("Test1 n = %d\r\n", n);
}

void Test2(int n, void Test1(int n))
{
    printf("Test2 n = %d\r\n", n);
}

int main(int argc, char* argv[])
{
    PFUN1 pFun1 = Test1;
    PFUN1(1);

    PFUN2 pFun2 = Test2;
    pFun2(2, pFun1); 

    return 0;
}
2012-12-29 10:36
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
自己分析了一下,指针函数不熟,就不献丑了。。。


[fly]存在即是合理[/fly]
2012-12-29 11:05
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:2 
以下是引用rjsp在2012-12-29 10:12:42的发言:

这玩意儿很简单呀,一层层的剥皮
void (*signal(int sig,void(*func)(int)))(int);
就剥成了
外层的 void (*)(int);
和内层的 signal( int sig, void(*func)(int) )
也就是 signal 这个函数,第二个参数是 void (*)(int) 类型,返回值类型也是 void (*)(int)
而 void (*)(int) 就是一个扑通的函数指针
这样啊...我记得:
void (*)(int) signal(int sig, void(*func)(int))
返回值应该这么写啊,那么写也行啊...说实话一开始也看不太懂

I have not failed completely
2012-12-30 22:00
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
我估计这类题目也就老师(考试 考官)的吧

谁自己写应用代码 弄这么复杂的函数  估计得跳楼了

DO IT YOURSELF !
2012-12-30 22:08
快速回复:遇到一超恐怖的声明,看大家能不能读懂
数据加载中...
 
   



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

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