#include
#include
#include
using namespace std;
//1 C语言函数指针
//解释:这是一种很特殊的指针,它的指向是一个函数的入口
//作用:该指针可以接受一个函数的地址,代表这个函数执行函数的操作
//函数指针举例
//下面是一个函数指针pFunc, 它只能指向返回值为float,形参为vector
float (*pFunc1)(const vector
//函数名 : findMax
//函数功能 : 查找vector容器的最大值
//输入参数 : v
//输出参数 : 无
//返回值 : 返回vector容器的最大值
float findMax(const vector
{
float fMax = 0;
for (float curValue : v)
{
if (curValue > fMax) fMax = curValue;
}
return fMax;
}
//函数名 : findMin
//函数功能 : 查找vector容器的最小值
//输入参数 : v
//输出参数 : 无
//返回值 : 返回vector容器的最小值
float findMin(const vector
{
auto fMin = 0xFFFFFF;
for (auto curValue : v)
{
if (curValue < fMin) fMin = curValue;
}
return fMin;
}
//函数名 : average
//函数功能 : 计算vector容器的所有元素的平均值
//输入参数 : v
//输出参数 : 无
//返回值 : 返回vector容器的所有元素的平均值
float average(const vector
{
auto fSum = 0;
for (auto curValue : v)
{
fSum += curValue;
}
auto fAverage = fSum / v.size();
return fAverage;
}
typedef float (*pPointer)(const vector
//C语言函数指针举例
int main()
{
//用法1 先定义函数指针类型float (*pFunc1)(const vector
vector
v.push_back(10.44);
v.push_back(15.8);
v.push_back(112.9);
pFunc1 = findMax;
float fMax = (*pFunc1)(v);
pFunc1 = findMin;
float fMini = (*pFunc1)(v);
pFunc1 = average;
float fAverage = (*pFunc1)(v);
//用法2 使用到时再定义函数指针float (*pFunc2)(const vector
float (*pFunc2)(const vector
pFunc2 = findMax;
fMax = (*pFunc2)(v);
pFunc2 = findMin;
fMini = (*pFunc2)(v);
pFunc2 = average;
fAverage = (*pFunc2)(v);
//用法3 把函数指针定义为数据类型typedef float (*pPointer)(const vector
pPointer pFunc3 = findMax;
fMax = (*pFunc3)(v);
pFunc3 = findMin;
fMini = (*pFunc3)(v);
pFunc3 = findMin;
fMini = (*pFunc3)(v);
return 0;
}
//2 C语言指针函数
//解释:这是一种返回值为指针的函数
//作用:调用这个函数,他的最终返回值是一个指针,指针类型必须一致,否则赋值失败
//函数名 : add
//函数功能 : 两数相加
//输入参数 : v1 第一个数
//输入参数 : v2 第二个数
//输出参数 : 无
//返回值 : 返回两数相加后的变量指针
float *add(int v1, int v2)
{
float *pSum = (float*)malloc(1 * sizeof(float)); //使用必须调用delete释放内存,否则会有内存泄露
pSum = NULL;
//*pSum 是解指针
*pSum = v1 + v2;
return pSum;
}
//C语言指针函数举例
int main()
{
float *pSum = add(10, 20);
delete pSum; //一定要释放,否则内存泄露
return 0;
}