分类:
一个最简单的函数指针定义如下:
Void (*funcPtr) (); //funcptr是一个函数指针,它指向的函数没有参数,返回值为void
非常复杂的函数指针定义:
1. Void * (* ( * fp1)(int))[10];
解析:Void * X[10];è这是一个有10个void*类型的元素的数组。
X=* ( * fp1)(int),从而可以看出(*fp1)(int)它是一个指针,指向一个数组。这个数组有10个void指针类型的元素。
Fp1是一个函数指针,它的参数是一个int型的参数。返回值为一个指向含有10个void*元素的数组的指针。
2. Void * ( * fp1)(int)[10];
解析:void*X[10];èX是一个有着10个void*类型的数组
X=( * fp1)(int);
Fp1是一个函数指针,它有一个整型参数,其返回值是一个有着10个void*类型的元素的数组。
若是这个形式Void * ( * fp1)(int)[10],则其返回值为一个指向含有10个void类型的数组的指针。
3. Void ( * fp1)(int)[10];
解析:void X[10]èX是一个有着10个void类型的数组
X=( * fp1)(int);
Fp1是一个函数指针,它有一个整型参数,其返回值是一个有着10个void类型的元素的数组
若是这个形式,Void ( * fp1)(int)[10],则其返回值为一个有10个void类型的数组。
4. Float (*(*fp2)(int,int,float))(int);
解析:Float X(int)èX是一个函数,有一个整型参数,返回值是一个浮点数。
X=*(*fp2)(int,int,float);
Fp2是一个函数指针,它有三个参数,前两个是整型,最后一个是浮点型。其返回值是一个指针,是一个指向函数的指针(函数指针)。这个函数指针所指向的函数的原型是只有一个整型参数,返回值是一个浮点数。
5. Typedef double (*(*(*fp3)())[10])();
解析:fp3是一个函数指针;它不带参数;返回值是一个指针。
X=(*(*fp3)())
Typedef double (*X[10])()
X是一个数组,他有10个元素,它的元素都是函数指针,这个函数指针所指向的函数原型是一个没有参数,返回值为double类型的函数。
综合起来就是:fp3是一个新定义的数据类型,它是一个函数指针,这个函数指针所指向的函数原型是不带参数,返回值是一个指向数组的指针。这个数组有10个元素,其元素类型是一个函数指针,这个函数指针所指向的函数原型是一个没有参数,返回值为double类型的函数。
6. Int (*(*fp4())[10])();
解析:fp4是一个函数,他没有参数,返回值是一个指针;
X= (*fp4());
Int (*X[10])();
X是一个数组,其有10个元素,每个元素都是一个函数指针,这个函数指针所代表的函数原型是一个没有参数,返回值是整型的函数。
综合起来就是:fp4是一个函数,他没有参数,返回值时一个指向数据的指针,这个数组有10个元素,每个元素都是一个函数指针,这个函数指针所代表的函数圆型是一个没有参数,返回值是整型的函数。