1.构成:
所指函数的返回类型 + 指针名 + 所指函数的参数列表
double (*pf)(int);// 指针pf指向的函数, 输入参数为int,返回值为double
const vector<int>* (*seq_ptr)(int);// 指针seq_ptr指向一个vector类型的指针
2.使用方式:
const vector<int> *pseq = seq_ptr(pos);//赋值调用
const vector<int> *pseq = (*seq_ptr)(pos);//推荐使用
double y = (*pf)(5);//推荐使用
double y = (pf)(5)
实例:注意函数名就是指针,将指针作为参数传入即可
#include <stdio.h>
#include <time.h>
#include <iostream>
clock_t start, stop;
double duration;
double f1(int n, double a[], double x)
{
int i;
double p = a[0];
for (i = 1; i <= n; i++)
p += (a[i] * pow(x, i));
return p;
}
double f2(int n, double a[], double x)
{
int i;
double p = a[n];
for (i = n; i > 0; i--)
p += ( a[i-1]+x * p );
return p;
}
void get_duration(int n, double a[], double x,double(*funtion_ptr)(int n ,double a[],double x))
{
start = clock();
double p = (*funtion_ptr)(n, a, x);
stop = clock();
duration = ((double)(stop - start) / CLK_TCK);
std::cout << "\n tick:" << (double)(stop - start) << "\n"
<< "second:" << duration << std::endl;
}
const int max = 10;
double f1(int n, double a[], double x);
double f2(int n, double a[], double x);
int main()
{
int i;
double a[max];
for (i = 0; i < max; i++)
a[i] = (double) i; // turn to double for next calculate
get_duration(max - 1, a, 1.1, f1);//将f1(函数名即是指针)作为参数传入
system("pause");
return 0;
}
3.指针数组
构建一个装有函数的列表,可以用数组的特性来循环或选择
const vector<int>* fibon_seq(int size);
const vector<int>* lucas_seq(int size);
const vector<int>* square_seq(int size);//3种数列除了计算方法别的参数都相同
//seq_array是个数组,内放函数指针
const vector<int>* (*seq_array[])(int) = {fibon_seq,lucas_seq,square_seq};
//用数组的特性来循环
int seq_index = 0;
while(next_seq==true)
{
seq_ptr = seq_array[++seq_index];
}
本文介绍了C++中的函数指针,包括其构成,如何作为参数传递,以及如何创建函数指针数组。通过实例说明了如何将函数名当作指针,将函数指针作为参数传入函数,实现灵活的函数调用。
1643

被折叠的 条评论
为什么被折叠?



