·指针数组
指针数组本质上是数组,是一个存放指针的数组。
Eg:
int *arr1[10]; //①
char *arr2[10];//②
char **arr3[5];//③
//① ② ③ 均为指针数组,
//①是数组(int*类型)中元素是 (int*类型) ;
//②是数组(char*类型)中元素是(char*类型);
//③是数组中存放 二级指针
·数组指针
数组指针本质上是指针,是一个指向数组的指针。 指针变量存放数组地址
Eg:
int *pint;//指向整型数据的指针:
float *pf;//指向浮点型数据的指针;
int *p[10];//指针数组
//数组中存放类型为 int * 类型的指针;
int (*p)[10];//指针数组
//指向整形数组的指针;
//注:
int *p[10];
int (*p)[10];
//p 先与什么结合,即可表示 p 本质是什么
//" [ ] " 的优先级于 " * " 的优先级
·函数指针
函数指针本质上是指针,是一个指向函数的指针,即指针变量保存的是函数的地址
Eg:
void test(char* str);
void (*p)(char*); //p是一个指针,并且指向一个函数,这个函数参数是char*,返回类型是void类型
//哪一个可以存放函数test 的地址?
void (*p1)();
void *p2();
//首先,能给储存地址,就要求p1或p2是指针
//p1可以存放。p1先和*结合,即p1是指针,指针指向一个函数,指向的函数没有参数,返回值为空
(*(void(*)())0)();
void (*signal(int,void(*)(int)))(int);
//简化为:void (*)(int) signal(int,void(*)(int));
·函数指针数组
数组是一个存放相同类型数据的存储空间,要把 函数的地址 存到一个数组中,那这个数组就叫函数指针数组。
如何定义:
int (*p1[10])();//√
//p1先和“ [ ] ”结合,说明p1是数组,数组内容是 "int(*)()"类型的函数指针
int *p2[10]();// ×
int (*)()p3[10];// ×
//定义常函数指针数组
用途:转移表
例子:计算器
·指向函数指针数组的指针
指向函数指针数组的指针,指针指向一个数组,数组的元素都是函数指针
Eg:
void (*(*a)[10])();
//函数指针数组的指针