正在加载图片...
必须与其指向的函数有共同的返回值和参数表。定义函数指针的语法形式如下: data type (variable)(typel, type 其中data_type是函数指针所指向的函数的返回值类型,“*”是取值操作符, variable是 函数指针名, typel- typen是函数指针所指的函数的各个参数类型。 注意:在函数指针的说明中,包含取值操作符“*”和函数指针名的小括号不能省略, 否则定义语句的意义发生改变。如: double*pf(int* double,char*);∥定义一个返回值为双精度型指针的函数。 double(* print, double char*)∥定义一个函数指针,它所指向的函数具有双精度的返回 值 在前面的讨论中已经知道,如果不带下标,单独的数组名将被作为一个指向该数组占用 内存区域的首地址的指针。函数名与数组名类似,它就是一个指向该函数的函数指针。而函 数名较为特殊的是,在其前面使用取值操作符“&”后得到和仍然是一个指向该函数的指 针,且它们具有相同的数据类型。在使用函数指针调用函数之前必须对该指针进行初始化(在 定义时进行或用赋值语句进行)。 注意:对于函数指针的初始化和赋值,只有为其赋值的函数名或函数指针与被赋值的函 数指针具有相同的类型,所指向的函数具有相同的返回值以及参数表匹配时,才有可能进行 赋值,否则将会导致编译错误。 例如 extern int min(int*, int) extern void(pfv (int*, int, int) extern int("pfi (int*, int)=0; pfi=min; //corect pfv=min; //error pfv=pfi; //error 函数指针还可以用0来对其赋值,表明该函数指针还没有指向任何函数 函数指针还可以用来指向重载函数。当函数名表示一个重载函数时编译器会自动寻找返 回值类型及参数表与之完全匹配的函数实例,并取其开始地址作为函数指针的值。如果不能 完全匹配,该初始化或赋值语句将导致一个编译错误 在使用函数指针来进行函数调用时在函数指针名前面可以加取值操作符“*”,也可以不 加,而是直接用函数指针名后跟着包括在小括号中的实际参数表来进行调用 例如:pfi( data, num);等价于(* pfi)(data,num) 也可以定义元素是函数指针的数组,利用其数组元素实现特定功能函数的调用。函数指 针数组的定义及使用的一些相关知识与函数指针相类似,函数指针还可以作为函数的参数或 返回值,具体可参考函数一节及例3.4必须与其指向的函数有共同的返回值和参数表。定义函数指针的语法形式如下: data_type (*variable)(type1,type2,. . .,typen); 其中 data_type 是函数指针所指向的函数的返回值类型,“*”是取值操作符,variable 是 函数指针名,type1~typen 是函数指针所指的函数的各个参数类型。 注意:在函数指针的说明中,包含取值操作符“*”和函数指针名的小括号不能省略, 否则定义语句的意义发生改变。如: double *pf(int *,double,char *);//定义一个返回值为双精度型指针的函数。 double (*pf)(int *,double,char *);//定义一个函数指针,它所指向的函数具有双精度的返回 值。 在前面的讨论中已经知道,如果不带下标,单独的数组名将被作为一个指向该数组占用 内存区域的首地址的指针。函数名与数组名类似,它就是一个指向该函数的函数指针。而函 数名较为特殊的是,在其前面使用取值操作符“&”后得到和仍然是一个指向该 函数的指 针,且它们具有相同的数据类型。在使用函数指针调用函数之前必须对该指针进行初始化(在 定义时进行或用赋值语句进行)。 注意:对于函数指针的初始化和赋值,只有为其赋值的函数名或函数指针与被赋值的函 数指针具有相同的类型,所指向的函数具有相同的返回值以及参数表匹配时,才有可能进行 赋值,否则将会导致编译错误。 例如: extern int min(int *,int); extern void (*pfv)(int *,int,int)=0; extern int (*pfi)(int *,int)=0; main() { pfi=min;//corect pfv=min;//error pfv=pfi;//error } 函数指针还可以用 0 来对其赋值,表明该函数指针还没有指向任何函数。 函数指针还可以用来指向重载函数。当函数名表示一个重载函数时编译器会自动寻找返 回值类型及参数表与之完全匹配的函数实例,并取其开始地址作为函数指针的值。如果不能 完全匹配,该初始化或赋值语句将导致一个编译错误。 在使用函数指针来进行函数调用时在函数指针名前面可以加取值操作符“*”,也可以不 加,而是直接用函数指针名后跟着包括在小括号中的实际参数表来进行调用。 例如:pfi(data,num); 等价于 (*pfi)(data,num); 也可以定义元素是函数指针的数组,利用其数组元素实现特定功能函数的调用。函数指 针数组的定义及使用的一些相关知识与函数指针相类似,函数指针还可以作为函数的参数或 返回值,具体可参考函数一节及例 3.4
<<向上翻页
©2008-现在 cucdc.com 高等教育资讯网 版权所有