拜读候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 打赏 收藏 转发到动态 举报
写回复
用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;
}
  • 打赏
  • 举报
回复
函数的返回值是一个函数指针,这个函数返回VOID,并且以一个返回值为VOID的函数指针为参数
好像是这个:)
bluedodo 2003-06-24
  • 打赏
  • 举报
回复
up

24,861

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧