1) 函数指针的定义/用法
l 声明与定义分离
float (*pFunc) (int) //声明
这是一个指向参数为int,返回值为float的函数指针。
float Print(int a)
{
return 1.1f;
}
pFunc = Print;
float f = (*pFunc)( 1 );
l 声明与定义
float (*pFunc) (int) = Print; //声明和定义
float f = (*pFunc)( 1 );
l 函数指针数组
float (*pFunc[]) (int) = {Print1, Print2, Print3};
l typedef
typedef float (*Func) ( int );
Func p[10]; // 10个函数指针
注意:如果定义函数指针时不加(),则有如下:
float *pFunc(int);// 这是一个函数声明, 函数返回float*
2) 例子解析
l 返回值是指针数组的函数指针
void* (* (*Func)(int)) [10];
首先 void** (*Func) (int) 是一个函数指针,参数是int,返回值是一个指针,指向的是10个void指针的数组。(*(*Func))表示返回值是一个指针。
l 返回值是函数指针的函数指针
float (* (*Func) ( int ) ) (double);
首先 (*Func) (int) 是一个函数指针,参数是int,返回值是一个函数指针,指向参数为double,返回值为float的函数。(*(*Func))表示返回值是一个指针。
l 返回值是函数指针数组的函数指针
float (* ( * (*Func)(int)) [10] ) (double);
首先(*Func)(int)是一个函数指针,参数是int,返回值是一个指针
【 (*(*Func))表示返回值是一个指针】。这个指针指向的是一个指针数组。数组里的指针是函数指针,指向的是参数为double,返回值为float的函数。
l 带括号和不带括号的区别
int (* ( *Func (double) ) [10] ) (float);
这是一个函数声明而不是函数指针,参数是double,返回值是一个指针,指向一个数组,数组里是函数指针,这个函数参数为float,返回值是int。