资讯动态

C++函数指针详解

发布时间:2026/10/10 1:25:24 来源:尧图企业网站定制
1. 获取函数的地址2. 声明一个函数指针3.使用函数指针来调用函数获取函数指针函数的地址就是函数名要将函数作为参数进行传递必须传递函数名。声明函数指针声明指针时必须指定指针指向的数据类型同样声明指向函数的指针时必须指定指针指向的函数类型这意味着声明应当指定函数的返回类型以及函数的参数列表。例如123doublecal(int);// prototypedouble(*pf)(int);// 指针pf指向的函数 输入参数为int,返回值为doublepf cal;// 指针赋值如果将指针作为函数的参数传递1voidestimate(intlines,double(*pf)(int));// 函数指针作为参数传递使用指针调用函数123doubley cal(5);// 通过函数调用doubley (*pf)(5);// 通过指针调用 推荐的写法doubley pf(5);// 这样也对 但是不推荐这样写函数指针的使用12345678910111213141516171819202122232425262728293031#include iostream#include algorithm#include cmathusingnamespacestd;doublecal_m1(intlines){return0.05 * lines;}doublecal_m2(intlines){return0.5 * lines;}voidestimate(intline_num,double(*pf)(intlines)){cout The line_num need time is: (*pf)(line_num) endl;}intmain(intargc,char*argv[]){intline_num 10;// 函数名就是指针直接传入函数名estimate(line_num, cal_m1);estimate(line_num, cal_m2);return0;}函数指针数组这部分非常有意思123456789101112131415161718192021222324252627282930313233343536373839404142434445#include iostream#include algorithm#include cmathusingnamespacestd;// prototype 实质上三个函数的参数列表是等价的constdouble* f1(constdoublearr[],intn);constdouble* f2(constdouble[],int);constdouble* f3(constdouble* ,int);intmain(intargc,char*argv[]){doublea[3] {12.1, 3.4, 4.5};// 声明指针constdouble* (*p1)(constdouble*,int) f1;cout Pointer 1 : p1(a, 3) : *(p1(a, 3)) endl;cout Pointer 1 : (*p1)(a, 3) : *((*p1)(a, 3)) endl;constdouble* (*parray[3])(constdouble*,int) {f1, f2, f3};// 声明一个指针数组存储三个函数的地址cout Pointer array : parray[2](a, 3) : *(parray[2](a, 3)) endl;cout Pointer array : parray[2](a, 3) : *(parray[2](a, 3)) endl;cout Pointer array : (*parray[2])(a, 3) : *((*parray[2])(a, 3)) endl;return0;}constdouble* f1(constdoublearr[],intn){returnarr;// 首地址}constdouble* f2(constdoublearr[],intn){returnarr1;}constdouble* f3(constdouble* arr,intn){returnarr2;}这里可以只用typedef来减少输入量1234typedefconstdouble* (*pf)(constdouble[],int);// 将pf定义为一个类型名称pf p1 f1;pf p2 f2;pf p3 f3;到此这篇关于C函数指针详解的文章就介绍到这了

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑