社区
工具平台和程序库
帖子详情
拜读候Sir的STL源码剖析的疑问,关于函数指针。。。
zxy819
2003-06-24 08:48:15
static void (* set_malloc_handler(void (*f)()))()
{
void (* old)() = __malloc_alloc_oom_handler;
__malloc_alloc_oom_handler = f;
return(old);
}
static void (* set_malloc_handler(void (*f)()))()到底是怎么回事。。。
...全文
263
10
打赏
收藏
拜读候Sir的STL源码剖析的疑问,关于函数指针。。。
static void (* set_malloc_handler(void (*f)()))() { void (* old)() = __malloc_alloc_oom_handler; __malloc_alloc_oom_handler = f; return(old); } static void (* set_malloc_handler(void (*f)()))()到底是怎么回事。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
softworm163
2003-06-26
打赏
举报
回复
候捷的那本东西,如果你没看过effective c++和more effective c++你未必全部看得懂
---------------------以我之见
softworm163
2003-06-26
打赏
举报
回复
它用那么多个括号是因为运算符的优先级。
static void (* set_malloc_handler(void (*f)()))()
它的参数是void
用(void (*f())来初始化这个函数指针
f()也是一个函数指针
那是一个malloc_handler的指针
而这整个函数是用作分配内存时空间不够的malloc_handler
即内存不够时就调用这个函数,
可能随后还会抛出一个异常
这跟new_handler差不多
具体可以参照more effective c++(还是effective c++ 2nd记得不太清)
说new运算符那一章
wlfjck
2003-06-26
打赏
举报
回复
也可以那么写
typedef void (*fp) ();
fp set_malloc_hardler(fp x);
zf0579
2003-06-26
打赏
举报
回复
这不就是个函数指针的用法吗?
magic007
2003-06-25
打赏
举报
回复
void (* set_malloc_handler(void (*f)()))()
这样来看:把 void (*f)()写成X
则有
void (*set_malloc_handler(X))()
如果把set_malloc_handler(X)写成Y
则有
void(*Y)()
呵呵,这就是一个函数指定的定义了。也就是说
函数set_malloc_handler返回指是一个函数指针,函数指针所指函数返回类型为void,参数为空
而相应的X为void (*)()也是一个函数指针,所指函数返回类型为void,参数为空,
也就是说
函数set_malloc_handler的参数也是一个函数指针,返回的也是一个函数指针,且二个函数指针所指函数原型一样。
fangrk
2003-06-25
打赏
举报
回复
一层一层脱
set_malloc_handler(void(*f)())是一个函数指针,指向一个返回类型和入口参数都为空的函数。
所以推导出
set_malloc_handler是一个函数:返回类型为上述指针,入口参数也是一个函数指针,指向一个返回类型和入口参数都为空的函数。
#include <iostream>
using namespace std;
void Entry()
{
cout<<"Entry"<<endl;
}
void Ret()
{
cout<<"Ret"<<endl;
}
void (* set_malloc_handler(void (*f)()))()
{
(*f)();
return &Ret;
}
int main()
{
(*set_malloc_handler(&Entry))();
}
liao2001
2003-06-25
打赏
举报
回复
这是信号/中断 常用的
晨星
2003-06-25
打赏
举报
回复
给楼主一个小程序玩玩,:)
#include <iostream>
using namespace std;
void f(void)
{
cout << "Hello f!" << endl;
}
void (*g(void(*pf)(void)))()
{
cout << "Hello g!" << endl;
pf();
return pf;
}
int main()
{
g(f)();
return 0;
}
小笨和漂向北方
2003-06-24
打赏
举报
回复
函数的返回值是一个函数指针,这个函数返回VOID,并且以一个返回值为VOID的函数指针为参数
好像是这个:)
bluedodo
2003-06-24
打赏
举报
回复
up
免费下载:C++源代码
剖析
(简体,繁体两本)
C++源代码
剖析
简体 C++源代码
剖析
繁体 两本书,搜索了好久才下到的。高清晰目录、字体。 欢迎下载
C/C++指针经典资料大全
C/C++指针经典资料大全,十余部经典资料书籍,是您精通C指针的理想教程。
改善程序设计技术的50个有效做法(CC++)(free)
PPT文档,改善程序设计技术的50个有效做法
C~C++程序员实用大全
C~C++程序员实用大全――C~C++最佳编程指南
侯捷——
STL
源码
剖析
笔记
侯捷——
STL
源码
剖析
笔记 1.总览 1.
STL
六大部件之间的关系 在下图中,我们使用了如下: 1.一个容器vector 2.使用vector时,使用分配器分配内存 3.使用vi.begin(),vi.end()即迭代器,作为算法的参数 4.使用count_if算法 5.使用仿函数less() 6.使用函数适配器来对我们算法的结果进行进一步筛选(not1, bind2nd) 2.复杂度 3.迭代器区间 迭代器是一个左开右闭的区间,也就是说迭代器的end是最后一个元素的下一个元素。 4.容器的结构和
工具平台和程序库
24,861
社区成员
27,334
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章