12-2-28关于一些指针的盘点

来源:互联网 发布:广发华福软件 编辑:程序博客网 时间:2024/04/30 08:16

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