声明一个返回特定类型函数指针的函数

static void (* __set_malloc_handler(void (*__f)()))()
{
void (* __old)() = __malloc_alloc_oom_handler;
__malloc_alloc_oom_handler = __f;
return(__old);
}

理解步骤:

 一:     void(*func)();

f是一个函数指针,指向的函数类型就是 void (*func)()

或者说是 void  f() 总之 func指向一个无参数的函数

 二:     __set_malloc_handler(   void (*__f)()   )  这是一个整体;

这个整体如果替换掉上部分的func 就变成了:

void (* __set_malloc_handler(void (*__f)()))();

 三:    因此 __set_malloc_handler(   void (*__f)()   ) 这个东西在

void (* __set_malloc_handler(void (*__f)()))();中表示一个函数指针,

并且这个指针指向一个无参数函数。

也就是这个东西__set_malloc_handler(   void (*__f)()   )  的返回值是一个函数指针

四:换种写法:

void(*ptrType)();

ptrType __set_malloc_handler(   void (*__f)()   )();

原文地址:https://www.cnblogs.com/infoo/p/8706336.html

时间: 2024-10-23 13:18:50

声明一个返回特定类型函数指针的函数的相关文章

函数指针(函数指针作为函数形参/函数类型作为函数返回类型)

函数指针是指向函数的指针变量. 因此"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址.有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的.函数指针有两个用途:调用函数和做函数的参数. 1 #include<stdio.h> 2 int max(int

新手,对函数,函数指针,回调函数, 函数指针作为函数的返回值和block的一些见解

很多初学者,学c语言时,看到函数都觉得难,我也是,一开始觉得函数太难了,后来慢慢就理解了 第一:函数 在c语言中最简单的函数一般有四种: 1, 无返回值, 无参数. 2, 无返回值,有参数. 3, 有返回值,无参数. 4, 有返回值,有参数 1, 无返无参  定义方式:      void 函数名(); 一般不怎么用这种形式的函数,可用来输出,打印 void functionOne() { printf("无返回值,无参数"); // 没有返回值不能写return } int main

函数指针,函数指针数组,函数返回值为函数指针

函数的名字就是函数的首地址:定义函数指针; int (*p)(int ) p为函数指针变量名字,int 为函数的返回值类型为int型:(int)为函数的形参类型为int型, 注:因为优先级所以要用(*p),否则就会p先和后面的()结合为int*p(int),意思就变为p(int)函数的返回值为int* 注:main2()函数中   int (*p[])(int ,int )  为一维数组,下面写错了, #include<stdio.h> #include<stdlib.h> int

Day8 函数指针做函数参数

课堂笔记 课程回顾 多态 virtual关键字 纯虚函数 virtual func() = 0; 提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数. 多继承的二义性 . 重载 重写 重定义. 实现多态的理论基础:函数指针做函数参数. vptr指针与虚函数表. 构造函数不应为虚函数 多态会降低程序的执行速度.不建议所有的函数都是虚函数. 多态时的指针步进. 多继承在项目开发中使用的比较少. linux从2.4内核升级到2.6的时候,做到了电源可以热插拔,提前将电源驱动的接口规划

入职培训笔记记录--day9(1、指针函数与函数指针、函数指针数组 2、malloc memset 3、递归函数 4、结构体 5、共用体---》大小端 6、枚举)

1.指针函数与函数指针.函数指针数组 指针函数:返回值为指针的函数 char *fun() { char str[] = "hello world"; return str; } int main() { char *p = fun(); puts(p); return 0; } 编译时,会出现警告,返回了一个已经被释放掉的内存空间的首地址解决方法:1.static 2.char *str = "hello world"; 3.malloc 注意:使用完后要free

函数指针、函数指针数组

参考:百度百科 |函数指针|词条. 指针_函数,就不说了.自己感觉就是So-easy的.[ 声明格式:returnType *Function(arguments); ] 重点是 函数指针,以及突然冒出来的 函数指针数组;(特别说明,我习惯先写代码,再写注释:情况A:代码在左,注释向右.情况B:代码在上,注释在下.) 函数指针,我形象的描述 函数<-指针,(文中一切有问题请指正,谢谢).[声明格式: returnType(*pointer)(arguments); ] 举例: int fun(i

再论函数指针、函数指针数组

一.基本概念 数组名:本质是指向数组第一个元素的常量指针,即数组首地址 函数名:本质是指向函数第一条指令的常量指针,即函数首地址 函数指针:保存了函数首地址,可以看做函数的别名 二.函数指针的声明方法 type (*func)(type &, type &) 1.该语句声明了一个指针func,它指向了一个函数: 2.该函数带有2个type型参数,并返回一个type型的值: p.s. tpye类型可以看做int或者float等C++类型 3.可以把整个函数看做一个数据类型 tpye func

c语言的函数指针和函数指针数组的简单demo

今天,简单记录一下,函数指针和函数指针数组的使用,废话不多说,直接贴上代码,里面有详细的注释,方便以后查阅. 1 #include <cstdio> 2 #include <Windows.h> 3 4 typedef void(*myFun)(const char*);//这里定义的一个函数类型(返回值为void,参数为const char*),类型名为myFun,使用见第28行 5 6 void(*func)(const char* name); //声明了一个函数指针,指针名

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type