函数指针的声明: 函数指针包括两部分信息: 1).函数本身的内存地址 2).函数参数和返回值类型信息 因此,声明一个函数需要包括以下三部分内容: 1)函数返回值类型 2)指向函数的函数指针名 3)函数参数类型列表 函数指针声明通式: return_type (*fun_pointer_name)([parameter1_type],[parameter2_type],...); 注意:要与下式区分开来: return_type *fun_pointer_name(para1_type,para2_type,...);//这个是一个函数声明,声明返回一个指针的函数 函数指针的初始化: 与普通的指针变量的初始化一样。 注意:不能对未初始化的函数指针进行函数调用操作。对未初始化的函数指针进行作操作是危险的(当然赋值操作除外^_^)。 建议:在声明一个指针时,就立即将它初始化为NULL。(这样是不是应该叫定义了^_^) 函数指针的赋值: 直接将与函数名赋值给函数指针名就可以。如下: int sum(int a,int b) { return a+b; }
void main() { int (*funPtrSum)(int,int);//声明函数指针funPtrSum,并未初始化 int x=10,y=50,z=0,; funPtrSum=sum; z=funPtrSum(x,y); } 函数指针的使用: 1) 如同普通的函数调用那样用来作直接调用函数 函数指针名(函数参数列表); 2)作为函数参数 函数指针也可以作为函数参数,这样函数可以通过这个指针参数对它所指向的函数进行调用。这时,我们在调用这个有函数指针参数的函数时,把这个指针所向的函数名传进去就可以了。如下: int callSum(int (*pPtrSum)(int,int),int x); z=callsum(sum(x,y),z);
3)函数数组 声明格式如下: array_type (*function_pointer_array_name[elements_num])(function_parameter_type_list); 也可以如下定义: array_type (*function_pointer_array_name[elements_num])(function_parameter_type_list)= {function_name0,function_name1,...}; 另外插入一点关于数组作函数参数的内容: 如果把数组作为参数传递且在函数中需要用到这个数组的元素个数时,应把数组的元素个数作另一个参数传递。 测试的示例代码如下测试的示例代码如下: int sum(int a,int b) int sub(int a,int b) char cs(char a,char b) char csub(char a,char b) int callSum(int (*pPtrSum)(int,int),int pArr[],int length); int _tmain(int argc, _TCHAR* argv[]) //函数指针的声明或定义: //如下函数指针的声明方法是错误的:
//2)函数指针当作函数参数传递 //3)函数指针数组 char (*ptrFunSumArr2[2])(char,char); return 0; //函数指针作为参数的函数 return total;//(pPtrSum(m,m));
|
指针-----函数指针
最新推荐文章于 2024-10-20 21:31:08 发布
指针-----函数指针
2010-09-07 17:05