社区
工具平台和程序库
帖子详情
拜读候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)()))()到底是怎么回事。。。
...全文
279
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
作业
写回复
配置赞助广告
用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++指针经典资料大全
- 指针可以作为函数的返回值,例如动态内存分配函数`malloc`就返回一个指针。 - 递归函数中,指针可以用来保存中间状态,优化算法效率。 4. **指针与结构体/类** - 结构体或类的指针可以用来访问其成员,包括...
免费下载:C++源代码
剖析
(简体,繁体两本)
标题中的“C++源代码
剖析
”是一本关于深入理解C++编程语言的书籍,由知名IT作者侯捷撰写。这本书的目的是帮助读者理解和解析C++的源代码,从而提升编程技巧和对语言底层机制的掌握。它涵盖了C++的关键概念,如面向...
改善程序设计技术的50个有效做法(CC++)(free)
7. **
STL
**:掌握标准模板库(
STL
),包括容器(如vector、list、set等)、迭代器、算法和函数对象。 8. **RAII(Resource Acquisition Is Initialization)**:通过对象生命周期管理资源,例如使用构造函数获取...
C~C++程序员实用大全
在C语言部分,读者将学习到基本语法,包括变量声明、数据类型、运算符、流程控制(如if-else、switch-case、循环)、函数定义与调用、指针操作等。深入理解指针是C语言的关键,因为它们允许直接访问内存,实现高效的...
侯捷——
STL
源码
剖析
笔记
侯捷——
STL
源码
剖析
笔记 1.总览 1.
STL
六大部件之间的关系 在下图中,我们使用了如下: 1.一个容器vector 2.使用vector时,使用分配器分配内存 3.使用vi.begin(),vi.end()即迭代器,作为算法的参数 4.使用count_if...
工具平台和程序库
24,857
社区成员
27,331
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章