函数指针初步了解

xiaoxiao2021-02-27  322

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; }
转载请注明原文地址: https://www.6miu.com/read-2079.html

最新回复(0)