引用博文;

(博客园)[https://www.cnblogs.com/tp-16b/p/7860491.html]

对于在xv6中看到的一个映射表关系

关于: 函数指针数组

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
static uint64 (*syscalls[])(void) = {
[SYS_fork] sys_fork,
[SYS_exit] sys_exit,
[SYS_wait] sys_wait,
[SYS_pipe] sys_pipe,
[SYS_read] sys_read,
[SYS_kill] sys_kill,
[SYS_exec] sys_exec,
[SYS_fstat] sys_fstat,
[SYS_chdir] sys_chdir,
[SYS_dup] sys_dup,
[SYS_getpid] sys_getpid,
[SYS_sbrk] sys_sbrk,
[SYS_sleep] sys_sleep,
[SYS_uptime] sys_uptime,
[SYS_open] sys_open,
[SYS_write] sys_write,
[SYS_mknod] sys_mknod,
[SYS_unlink] sys_unlink,
[SYS_link] sys_link,
[SYS_mkdir] sys_mkdir,
[SYS_close] sys_close,
[SYS_trace] sys_trace,
[SYS_sysinfo] sys_sysinfo,
};

数组和指针是没关系的!

数组指针

int (*p)[4];

char (*p)[4];

指针数组

int *p[10];

char *p[10];

char **p[10]

它们都是大小为10元素的数组,里面分别存放着元素为 int,char, char** 类型的指针数组

函数指针

示例:

1
这里定义void (*p)()。一眼可知pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。

这里定义void (p)()。一眼可知pfun1先和结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。

函数指针数组

把函数的地址存到一个数组中,那这个数组就叫函数指针数组

int (*parr1[10])();

int *parr210;

int (*)() parr3[10];

parr1 先和 [] 结合,说明parr1是数组,数组的内容是什么呢? 是 int (*)() 类型的函数指针。