大前提:数组是数组指针是指针,数组和指针没有关系。
判断一个表达式是指针还是数组要看这个表达式先和谁结合。
指针数组:指针数组是一个数组,像int *a[ ] 由于a先和括号结合所以a是一个数组,数组中的元素是指针,故其是一个整型指针数组。
数组指针:数组指针是一个指针,如int (*a)[ ]由于a先和*结合,故a是一个指针,指针中存放数值的地址,其实一个整型数组指针。
函数指针:函数指针是一个存放函数地址的指针,既可以通过指针调用函数,亦可通过函数名直接表示。
函数指针的声明方法为:
函数类型 (标志符指针变量名) (形参列表);
int (*a)(int x,int y)
函数指针数组:
函数指针数组:我们也可以参考前面的分析方法,它是一个数组,这个数组中的元素就是我们前面所提到的函数指针。
char *(* p[3])(char *p);
上面这个就是一个函数指针数组,首先它是有3个元素的一个数组,里面存放的是指向函数的指针,这些指针指向一些返回值类型为指向字符的指针。
在这里的关键你要知道这个是数组,数组中的元素是函数指针。
指向函数指针数组的指针:char *(*(*p)[3])(char *p);
在这里,首先按照优先级从个最里面看,最里面的(*p)这是一个指针。
(*( *p)[3])这个说了这个指针是指向含有三个元素的数组的指针。
char*( *(*p)[3])(char *p)这个说了这个数组中存放的元素是3个函数指针,这些指针指向一些返回值为指向字符的指针。然后这个函数的参数是指向字符的指针。