函数指针初步了解

来源:互联网 发布:苏联知乎 编辑:程序博客网 时间:2024/05/20 10:56

C++版的函数指针的定义、初始化以及调用的一个具体例子

#include <iostream>const double * f1(const double ar[], int n);const double * f2(const double [], int n);const double * f3(const double *, int n);int main(void){    using namespace std;    double av[3] = { 1231.3, 2236.4, 3456.9 };    const double * (*p1)(const double *, int) = f1;//声明目标函数原型并初始化    //使用自动推断功能,等价于const double * (*p2)(const double *, int) = f2    auto p2 = f2;       cout << "Using Pointer To Fountion:\n";    cout << "Address   value\n";    //(*p1)(av, 3)和 p2(av, 3)都调用指向的函数(这里为f1()和f2()),并将av和3作为参数    //显示的是这两个函数的返回值,返回值的类型是const double *(即double值得地址)    //为了显示存储在这两个地址中的实际值,对地址运用运算符*(*(*p1)(av, 3),*p2(av, 3))    cout << (*p1)(av, 3) << ";" << *(*p1)(av, 3) << endl;    cout << p2(av, 3) << ";" << *p2(av, 3) << endl;    //声明指向三个函数的指针,形成一个函数指针数组,使函数调用更方便    //因为运算符[]的优先级高于*,所以*pa[3]表明pa是一个包含三个指针的数组    const double * (*pa[3])(const double *, int) = { f1, f2, f3 };    auto pb = pa;    cout << "\nUsing a array to pointers to fountion\n";    cout << "Address" <<   "Value\n";    //pa,pb表示指向函数指针的指针,pa[i],pb[i]表示数组中的指针,因此可以将任一种函数调用表示法用于它们    //const double * px = pa[0](av,3)/const double * py = (*pb[1])(av,3)    //double px = *pa[0](av,3)/double py = *(*pb[1])(av,3)    for (int i = 0; i < 3; i++)    {        cout << pa[i](av, 3) << ";" << *pa[i](av, 3) << endl;    }    //创建指向整个数组的指针,假设指针名为pd,因为pd是一个指针,不是数组,所以核心部分应该是(*pd)[3]    //即运算符*先与pd 结合    auto pd = &pa;//相当于const double *(*(*pd)[3])(const double *, int) = &pa;    cout << "\nusing pointers to an array of pointer\n";    cout << "Address " << " Value\n";    //pd为指向数组的指针,则*pd为数组,(*pd)[i]是数组中的元素,即函数指针    //所以函数调用方式为(*pd)[i](av,3)或者(*(*pd)[i])(av,3)    //返回指针指向的值为*(*pd)[i](av,3)或者*(*(*pd)[i])(av,3)    cout << (*pd)[0](av, 3) << ";" << *(*pd)[0](av, 3) << endl;    cout << (*(*pd)[1])(av, 3) << ";" << *(*(*pd)[1])(av, 3) << endl;    return 0;}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;}
0 0
原创粉丝点击