对指针数组 ; 数组指针 ; 函数指针 ; 函数指针数组 ; 指向函数指针数组的指针的理解

大前提:数组是数组指针是指针,数组和指针没有关系。

判断一个表达式是指针还是数组要看这个表达式先和谁结合。

指针数组:指针数组是一个数组,像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个函数指针,这些指针指向一些返回值为指向字符的指针。然后这个函数的参数是指向字符的指针。

猜你喜欢

转载自blog.csdn.net/wakelee14122/article/details/78891335