函数指针指针函数,复杂函数

函数指针:指向函数的指针,“数据类型”(*fun)(参数列表)“  void*(*fun)(int*,int*)

int (*p)(char)     p被声明为一个函数指针,这个函数带一个char类型的参数,并且有一个int 类型的返回值

char ** (*p)(float,float);  带两个float类型参数、返回值是char 类型的指针的指针函数

void * (*a[5]) (char * const ,char * const)   带两个char类型的const指针函数、无返回值的函数指针

指针函数:返回值是函数的指针,”数据类型“ *fun(参数列表) char* fun(int*,int*)

步骤:

一:第一函数指针:int (*pfun)(int*,int*):

二:定义函数:int fun(int*,int*);

三:把函数的地址赋给函数指针:pfun=fun

四:通过函数指针去调用这个函数"(*pfun)(p,q);",pfun是函数地址,*pfun函数本身。

const 阻止变量被改变

int * const r=&n;     int类型const指针

const int *p; int const *q;  const int类型指针

const int * const p=&n;     const int类型const指针

typedef 

typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称

右左法则

从最内部的括号开始阅读声明,向右看,然后想左看。当你碰到一个括号是就调转阅读的反向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都分析完毕。

当第一次开始阅读声明时,必须从变量名开始而不是从最内部括号。

int * (*(*fp1) (int) ) [10];

从变量名开始——fp1;

往右看,什么也没有,碰到了),因此向左看,碰到一个*——一个指针。

跳出括号,碰到一个(int)——一个带一个int 参数的函数。

向左看,发现一个*——(函数)返回一个指针。

跳出括号,向右看,碰到【10】 ——一个10元素的数组。

向左看,发现一个*——指针。

向左看,发现int——int类型。

fp1 被声明成为一个函数指针,该函数返回指向指针数组的操作。

猜你喜欢

转载自blog.csdn.net/QPZS_1/article/details/81226250