函数指针
来源:互联网 发布:linux系统办公软件 编辑:程序博客网 时间:2024/06/05 04:30
一.知识点:
函数指针:void (*f)()
函数返回指针: void* f()
const指针: const int*
指向const的指针 int* const
指向const的const指针 const int* const
二.实际应用:
int max(int x,int y){return x>y?x:y}
int main()
{
int max(x,y) //错误 int max(int,int)
int *p = &max; // 错误 int (*p)(int int) = &max;
}
三.数据声明:
(1) float(**def)[10]; //二级指针,指向一个一维数组的指针,数组的元素都是float
(2) double*(*gh)[10]; //指向一个一维数组,数组元素都是double*
(3) double(*f[10])(); //f是一个数组,有10个元素,元素都是函数的指针,指向的函数类型是没有参数且返回double的函数
(4) int*((*b)[10]); //同(2)是一维数组的指针
(5) Long(* fun)(int) //函数指针,参数为int 返回值为long
(6) int(*(*F)(int,int))(int) //函数的指针,指向的函数的类型是有两个int参数并且返回一个函数指针的函数,返回的函数指针指向一个有int参数且返回int的函数。
四.补充知识
一般来说,用typedef关键字会使该声明更简单易懂。在前面我们已经见过:
int (*PF)(int *, int);
也就是说,PF是一个函数指针“变量”。当使用typedef声明后,则PF就成为了一个函数指针“类型”,即:
typedef int (*PF)(int *, int);
这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:
PF ff(int);
下面将以程序清单1为例,说明用函数指针作为函数的返回值的用法。当程序接收用户输入时,如果用户输入d,则求数组的最大值,如果输入x,则求数组的最小值,如果输入p,则求数组的平均值。
程序清单 1 求最值与平均值示例
1 #include<stdio.h>
2 #include <assert.h>
3 double GetMin(double *dbData, int iSize) // 求最小值
4 {
5 double dbMin;
6 int i;
7
8 assert(iSize>0);
9 dbMin=dbData[0];
10 for (i=1; i<iSize; i++){
11 if (dbMin>dbData[i]) {
12 dbMin=dbData[i];
13 }
14 }
15 return dbMin;
16 }
17
18 double GetMax(double *dbData, int iSize) // 求最大值
19 {
20 double dbMax;
21 int i;
22
23 assert(iSize>0);
24 dbMax=dbData[0];
25 for (i=1; i<iSize; i++){
26 if (dbMax< dbData[i]) {
27 dbMax=dbData[i];
28 }
29 }
30 return dbMax;
31 }
32
33 double GetAverage(double *dbData, int iSize) // 求平均值
34 {
35 double dbSum=0;
36 int i;
37
38 assert(iSize>0);
39 for (i=0; i<iSize; i++)
40 {
41 dbSum+=dbData[i];
42 }
43 return dbSum/iSize;
44 }
45
46 double UnKnown(double *dbData, int iSize) // 未知算法
47 {
48 return 0;
49 }
50
51 typedef double (*PF)(double *dbData, int iSize); // 定义函数指针类型
52 PF GetOperation(char c) // 根据字符得到操作类型,返回函数指针
53 {
54 switch (c)
55 {
56 case 'd':
57 return GetMax;
58 case 'x':
59 return GetMin;
60 case 'p':
61 return GetAverage;
62 default:
63 return UnKnown;
64 }
65 }
66
67 int main(void)
68 {
69 double dbData[]={3.1415926, 1.4142, -0.5,999, -313, 365};
70 int iSize=sizeof(dbData)/sizeof(dbData[0]);
71 char c;
72
73 printf("Please input the Operation :\n");
74 c=getchar();
75 printf("result is %lf\n", GetOperation(c)(dbData,iSize)); // 通过函数指针调用函数
76 }
- 指针函数 函数指针
- 函数指针/指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 指针函数,函数指针
- 函数指针,指针函数,
- 指针函数,函数指针
- 函数指针 指针函数
- 函数指针、指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 函数指针&指针函数
- 指针函数 函数指针
- 指针函数 &函数指针
- 函数指针&指针函数
- void指针 函数指针
- http staus
- Java获取IP地址:request.getRemoteAddr()
- 双重检查锁定与延迟初始化
- 用WP短代码在侧栏小工具中调用不同分类的文章
- Oracle 日期处理
- 函数指针
- Web开发中关于缓存的使用
- 流行的一些缩写与定义的简意,如SOA,吞吐率等
- 蔡勒(Zeller)公式
- Linux sdcc安装
- iOS 多线程 锁 互斥 同步
- ZooKeeper Watcher执行顺序
- 转载关于int与string类型转换的两种方法
- DWZ中uploadify多文件上传