深入理解指针函数
来源:互联网 发布:异次元杀阵1解析 知乎 编辑:程序博客网 时间:2024/05/21 10:29
1.指针函数的定义
2. 用函数指针作为函数的返回值
我们用上面介绍的方法分析一下,ff首先与后面的“()”结合,即:
也就意味着,ff是一个函数。
这种写法确实让人非常难懂,以至于一些初学者产生误解,认为写出别人看不懂的代码才能显示自己水平高。而事实上恰好相反,能否写出通俗易懂的代码是衡量程序员是否优秀的标准。一般来说,用typedef关键字会使该声明更简单易懂。在前面我们已经见过:
也就是说,PF是一个函数指针“变量”。当使用typedef声明后,则PF就成为了一个函数指针“类型”,即:
这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:
程序清单1
#include<stdio.h> #include <assert.h> double GetMin(double *dbData, int iSize) // 求最小值 { double dbMin; int i; assert(iSize>0); dbMin=dbData[0]; for (i=1; i<iSize; i++){ if (dbMin>dbData[i]) { dbMin=dbData[i]; } } return dbMin; } double GetMax(double *dbData, int iSize) // 求最大值 { double dbMax; int i; assert(iSize>0); dbMax=dbData[0]; for (i=1; i<iSize; i++){ if (dbMax< dbData[i]) { dbMax=dbData[i]; } } return dbMax; } double GetAverage(double *dbData, int iSize) // 求平均值 { double dbSum=0; int i; assert(iSize>0); for (i=0; i<iSize; i++) { dbSum+=dbData[i]; } return dbSum/iSize; } double UnKnown(double *dbData, int iSize) // 未知算法 { return 0; } typedef double (*PF)(double *dbData, int iSize); // 定义函数指针类型 PF GetOperation(char c) // 根据字符得到操作类型,返回函数指针 { switch (c) { case 'd': return GetMax; case 'x': return GetMin; case 'p': return GetAverage; default: return UnKnown; } } int main(void) { double dbData[]={3.1415926, 1.4142, -0.5,999, -313, 365}; int iSize=sizeof(dbData)/sizeof(dbData[0]); char c; printf("Please input the Operation :\n"); c=getchar(); printf("result is %lf\n", GetOperation(c)(dbData,iSize)); // 通过函数指针调用函数 }
上述程序中前面4个函数分别实现求最大值、最小值、平均值和未知算法,然后实现了GetOperation函数。这个函数根据字符的返回值实现上面4个函数。它是以函数指针的形式返回的,从后面的main函数的GetOperation(c)(dbData, iSize)可以看出,通过这个指针可以调用函数。
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- 深入理解指针函数
- BOM
- eclipse 更改默认java风格
- 知名公司的Java面试题
- eclipse 中导入android 源码
- Tiny6410+K9GAG08U0E
- 深入理解指针函数
- hdu2547 无剑无我
- 习题3-8 UVa202 Repeating Decimals
- OC基础知识 -- 类和对象
- leetcode-Number of 1 Bits
- Java8 Lambda表达式教程
- 五猴分桃问题详解
- JavaScript中声明全局变量的三种方式(包括显示和隐式)
- iOS关于CGContextSetBlendMode: invalid context 0x0的错误