1,指针数组,数组指针
指针数组:存放指针的数组
数组指针:指向数组的指针
例子:指针数组 int *a[10] 数组a里面存放的是10个int 型指针
数组指针int (*a)[10] a是指针,指向一个数组,里面存放着10个int 型变量
进行扩宽:int (*a[10])(int) //看这阵型,肯定是一个指向函数的的指针,或者叫函数指针
我们进行分析:从a开始,右边是一个[],a是一个含有10个元素的数组,再看左边是*,是指针,表示该数组里面的元素是指针。
出了括号后,再看右边是(int) 表示每个指针指向的都是函数 里面的int 表明形参是int型
再看左边,是int ,表示该函数返回的是int型
一种比较好理解的方式:int (*p)(int) 单纯的就是一个指向函数的指针,该函数返回值为int ,形参为Int,现在将单个*p换成一个指针数组了*a[10],说明里面的指针指向的都是函数
2介绍几个稍微比较复杂的函数指针
void * (* (* fp)(int))[10]
宏观一看就是一个指针数组,然后从内,一次右-左,递归下去,到最外面。
fp是一个指向函数的指针,该函数的接受的参数为int型,并返回一个指针,该指针指向一个指针数组,该数组存放10个void*的指针
float (* (*fp)(int ,int ,float))(int)
宏观一看就是函数指针,该函数返回值为float,该函数接受的参数为int
fp是一个指向函数的指针,该函数接受三个参数,分别为int,int ,float,该返回值为指向一个函数的指针,该函数的返回值为float,接受的参数为Int
typedef double (* ( * (*fp)( ) ) [10] ) ( );
fp a;
宏观角度就是一个函数指针,该函数返回值为double,无参数。
fp是一个指向函数的指针,该函数无参数,返回值为指向一个存放10个指针的数组,这些指针指向的都是函数,这些函数无参数,返回值为double
fp a; 表示a 是是fp类型的一个。
int (* (* f4())[10])();
f4这里是函数名了,它是返回指针的函数,该指针指向含有10个指针的数组,这些函数返回值为int
这里强调一点,数组名,指针不可混淆,例如int a[10] int(*a)[]
第一个表达式,a 的正确说法是数组名 sizeof(a)=40
第二个式子,a才能叫指针,sizeof(a)=4