C++中函数指针的使用
2015-08-25 09:33
337 查看
函数的地址是存储其机器语言代码的内存的开始地址。
1、获取函数的地址
直接使用函数名(不跟参数)即可。
2、声明函数指针
返回类型 (*pf) (参数列表)
函数原型: double pam(int);
指针类型: double (*pf)(int)
3、使用函数指针来调用被指向的函数
pf =pam;
以下两种格式都可以(C++都允许):
double x= pf(5);
doube y= (*pf)(5)
4、使用typedef 进行简化
typededouble (*p_func) (int )
p_funcpf;
将p_func作为函数指针的原型
示例:
1、获取函数的地址
直接使用函数名(不跟参数)即可。
2、声明函数指针
返回类型 (*pf) (参数列表)
函数原型: double pam(int);
指针类型: double (*pf)(int)
3、使用函数指针来调用被指向的函数
pf =pam;
以下两种格式都可以(C++都允许):
double x= pf(5);
doube y= (*pf)(5)
4、使用typedef 进行简化
typededouble (*p_func) (int )
p_funcpf;
将p_func作为函数指针的原型
示例:
#include <iostream> using namespace std; const double * f1(const double ar[],int n); const double * f2(const double [] ,int); const double * f3(const double *,int ); typedef const double * (*p_func)(const double * ,int ); int main() { double av[3] = {111.3,1542.6,2227.9}; //pointer to a function // const double *(*p1)(const double *,int )=f1; // const double *(*p2)(const double *,int )=f2; p_func p1 = f1; p_func p2 = f2; cout<<"Using pointers to functions:\n"; cout<<"Address Value\n"; cout<<(*p1)(av,3)<<": "<<*(*p1)(av,3)<<endl; cout<<p2(av,3)<<": "<<*p2(av,3)<<endl; // const double *(*pa[3])(const double *,int )={f1,f2,f3}; // const double *(**pb)(const double *,int) = pa; p_func pa[3] = {f1,f2,f3}; p_func * pb = pa; cout<<"\nUsing an array of pointers to functions:\n"; cout<<"Address Values\n"; for(int i=0;i<3;++i) cout<<pa[i](av,3)<<": "<<*pa[i](av,3)<<endl; for(int i=0;i<3;++i) cout<<pb[i](av,3)<<": "<<*pb[i](av,3)<<endl; cout<<"Using pointers to an array of pointers:\n"; cout<<"Address Values\n"; p_func (*pc)[3]; pc = &pa; const double * pdb = (*pc)[1](av,3); cout<<pdb<<" : "<<*pdb<<endl; } const double * f1(const double * ar,int n) { return ar; } const double *f2(const double ar[],int n) { return ar+1; } const double * f3(const double ar[],int n) { return ar+2; }
相关文章推荐
- C/C++:内存字节对齐详解
- 关于C语言头文件保护的一些认识
- c++经典好书
- C++基础细节(一)
- C++名字空间
- VC++编译链接原理与过程
- C++中的常量定义小结
- c++ 头文件中定义函数的优缺点
- 快速排序
- C语言中一些将字符串转换为数字的函数小结
- 对比分析C语言中的gcvt()和ecvt()以及fcvt()函数
- C++中的explicit关键字
- C++笔试总结-面试笔试常考题型(一)指针-引用-宏定义-sizeof
- Hellowr
- C语言的标准库概述
- 【C语言探索之旅】第三部分第三课:SDL开发游戏之显示图像
- 【C语言探索之旅】第三部分第三课:SDL开发游戏之显示图像
- C语言编写控制台下PE分析工具(一)
- C语言基础--二维数组
- c++ 构造函数初始化列表