《STL源码剖析》中void (* set_malloc_handler(void (*f)()))()分析

问题

在阅读《STL源码剖析》的时候,遇到了这么一个函数

P57
先不说函数的意思,函数的形式我就没看懂…好多好多括号…

函数指针

函数指针就是指向函数的指针…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* 例一:函式指標直接呼叫 复制自WIKI*/

# ifndef __cplusplus
# include <stdio.h>
# else
# include <cstdio>
# endif

int max(int x, int y)
{
return x > y ? x : y;
}

int main(void)
{
/* p 是函数指针*/
int (* p)(int, int) = & max; // &可以省略
int a, b, c, d;

printf("please input 3 numbers:");
scanf("%d %d %d", & a, & b, & c);

/* 與直接呼叫函式等價,d = max(max(a, b), c) */
d = p(p(a, b), c);

printf("the maxumum number is: %d\n", d);

return 0;
}

在《STL源码剖析》里的这个函数,实际上使用了函数指针作为参数

1
void (*f)()

函数指针作为返回值

1
int (*test(int))(int, int)

阅读方法是由内向外读,首先test有形参列表,所以是一个函数,并且参数只需要一个int,然后test的前面有一个*,所以返回一个指针,(*test(int))作为一个指针,有形参列表(int, int),所以这个指针指向函数,并且这个函数返回int类型的值。

分析

1
void (* set_malloc_handler(void (*f)()))()

首先,set_malloc_handler作为函数名,有一个形参,是void(*f)(),void(f)()是一个函数指针类型,指向返回值为void,参数为空的函数。这说明set_malloc_handler是函数,并且前面有,所以要返回指针,指针后面接着形参列表,为空(),说明是指向函数的指针,并且指向的函数返回类型为void。

《STL源码剖析》中void (* set_malloc_handler(void (*f)()))()分析

http://example.com/2021/08/20/函数指针/

作者

xiaomaotou31

发布于

2021-08-20

更新于

2021-08-21

许可协议

评论