【C/C++】函数指针
2016-06-03 14:10
218 查看
首先必须要清楚如下:
【1】函数指针即函数的地址,也就是存储其机器语言代码的首地址。该地址用函数名表示。
【2】用具体的函数名给函数指针变量赋值时必须满足两者的类型(即函数返回值类型)和特征标(即函数参数表的个数及对应数据类型)相同。
然后,相关语法如下:
(1)函数指针变量pf的声明格式:返回类型 (*pf)(形参表);
(2)函数指针赋值格式:pf=函数名;//赋值运算符两边的指针和函数应满足【2】
(3)通过函数指针调用其指向的函数的格式:pf(实参表);
[NOTE]:关于(3)的调用格式语法也可写成:(*pf)(实参表);//虽然与(3)的写法在逻辑上似乎是矛盾的,但是C++是允许的。就像《C++ Primer Plus》里
//讲这个矛盾时的一句话说的:容忍逻辑上无法自圆其说的观点正是人类思维的特点。
//我个人比较喜欢用(3)的写法,因为这样用与“函数名本身表示函数的地址”这一点是对应的。
如:
int max(int*,int);
int (*pf)(int*,int);
pf=max;
max(arr,10);//用函数名调用函数
pf(arr,10);//用函数指针调用函数
//[NOTE] arr是int数组名。
完整示例函数:
【1】函数指针即函数的地址,也就是存储其机器语言代码的首地址。该地址用函数名表示。
【2】用具体的函数名给函数指针变量赋值时必须满足两者的类型(即函数返回值类型)和特征标(即函数参数表的个数及对应数据类型)相同。
然后,相关语法如下:
(1)函数指针变量pf的声明格式:返回类型 (*pf)(形参表);
(2)函数指针赋值格式:pf=函数名;//赋值运算符两边的指针和函数应满足【2】
(3)通过函数指针调用其指向的函数的格式:pf(实参表);
[NOTE]:关于(3)的调用格式语法也可写成:(*pf)(实参表);//虽然与(3)的写法在逻辑上似乎是矛盾的,但是C++是允许的。就像《C++ Primer Plus》里
//讲这个矛盾时的一句话说的:容忍逻辑上无法自圆其说的观点正是人类思维的特点。
//我个人比较喜欢用(3)的写法,因为这样用与“函数名本身表示函数的地址”这一点是对应的。
如:
int max(int*,int);
int (*pf)(int*,int);
pf=max;
max(arr,10);//用函数名调用函数
pf(arr,10);//用函数指针调用函数
//[NOTE] arr是int数组名。
完整示例函数:
#include<iostream> using namespace std; int main() { int max(int*,int); int min(int*,int); void callfun(int (*pf)(int*,int),int*);//函数指针作为函数形参 int p[10]={1,2,1,0,8,5,3,4}; int (*pf)(int*,int);//声明函数指针 pf=max; cout<<"max: "<<pf(p,10)<<endl;//通过函数指针pf调用函数max pf=min; cout<<"min: "<<pf(p,10)<<endl; callfun(max,p);//函数名max为实参 callfun(min,p); return 0; } //--------------------- void callfun(int (*pf)(int*,int),int *p) { cout<<pf(p,10)<<endl; } int max(int *pa,int n) { int m; m=pa[0]; for(int i=0;i<n;i++) if(pa[i]>m) m=pa[i]; return m; } int min(int *pa,int n) { int m; m=pa[0]; for(int i=0;i<n;i++) if(pa[i]<m) m=pa[i]; return m; }
相关文章推荐
- LeetCode 228: Summary Ranges
- 什么是幻数?
- LeetCode 091: Decode Ways
- [C++]详解C++11(部分)
- C语言结构体打包的意义
- 到数组的指针
- c++中类的构造函数的初始化成员列表详解!
- 广义表的C++简单实现
- 应用栈求解迷宫问题(C++实现)
- C++实现单链表
- 利用C++类实现顺序表
- 利用C++日期类实现简单的日期计算器
- C++入门小程序练习
- c语言通用平台des加密算法
- iOS复习OC语言 NSString与NSArray 使用
- 简单总结C语言中的运算符优先级
- C语言运算符及其优先级汇总表口诀
- C语言运算符优先级列表(超详细)
- C++ STL 基础及应用(5) 字符串
- C语言的指针(进阶篇章之二)