问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

函数指针的几种用法

发布网友 发布时间:2022-05-13 22:49

我来回答

1个回答

热心网友 时间:2022-04-22 12:48

什么是函数指针?函数指针指向的是特殊的数据类型,函数的类型是由其返回的数据类型和其参数列表共同决定的,而函数的名称则不是其类型的一部分。 用typedef定义函数指针类型// 定义函数指针类型cmpFuntypedefint (*cmpFun)(constint&, constint&); (3)这样,cmpFun就成了一种数据类型,可以用它来声明和定义形如(1)式中的pf那样的函数指针,比如:cmpFun pf = 0;cmpFun pf = someFunction; 举个例子来说明一下:#include<iostream>#include<string>usingnamespace std; // 定义函数指针pfint (*pf)(constint&, constint&); // 定义函数指针类型cmpFuntypedefint (*cmpFun)(constint&, constint&); // 具体函数int intCompare(constint& aInt, constint& bInt){ if(aInt == bInt) return 0; if(aInt > bInt) { return 1; } else { return -1; }} int main(void){ int aInt = 1; int bInt = 2; pf = intCompare; // pf = &stringCompare; // 和上面一句是完全一样的 // 使用pf if(pf(aInt, bInt) == 0) { cout << "two integers are equal" << "." << endl; } elseif(pf(aInt, bInt) > 0) { cout << aInt << " is greater than " << bInt << "." << endl; } else { cout << aInt << " is less than " << bInt << "." << endl; } cout << "------------------------" << endl; // 用函数指针类型cmpFun声明并初始化一个函数指针pf2 cmpFun pf2 = intCompare; // 使用pf2 if(pf2(aInt, bInt) == 0) { cout << "two integers are equal" << "." << endl; } elseif(pf(aInt, bInt) > 0) { cout << aInt << " is greater than " << bInt << "." << endl; } else { cout << aInt << " is less than " << bInt << "." << endl; } return 0;} 函数指针作为参数函数指针可以作为一个函数的参数,如下两种办法可以做到这一点:(a) int plusFun(int&, int&, int (constint&, constint&));(b) int plusFun(int&, int(*)(constint&, constint&));以上两个方式做到的是类似的事情:(a)中的plusFun函数的第三个参数就是一个函数指针, (b)中的第二个参数也是一个函数指针。(a)中的plusFun定义如下://函数指针作为参数:错误的做法//int plusFun(int& aInt, int& bInt, int paf(const int& cInt, const int& dInt))//{//// return aInt + bInt + paf(cInt, dInt);//} //函数指针作为参数:正确的做法int plusFun(int& aInt, int& bInt, int paf(constint &, constint &)){ int cInt = 2; int dInt = 1; return aInt + bInt + paf(cInt, dInt);} 调用plusFun的代码:…pf = intCompare;…// 函数指针作为参数int aaInt = 3;int bbInt = 4;cout << plusFun(aaInt, bbInt, pf) << endl; (b)中的plusFun定义如下://函数指针作为参数:错误的做法//int plusFun(int& aInt, int(*paf2)(const int& bInt, const int& cInt))//{// return aInt + paf2(bInt, cInt);//} //函数指针作为参数:正确的做法int plusFun(int& aInt, int(*paf2)(constint&, constint&)){ int bInt = 1; int cInt = 2; return aInt + paf2(bInt, cInt);} 调用plusFun的代码:…cmpFun pf2 = intCompare;…// 函数指针作为参数int aaInt = 3;cout << plusFun(aaInt, pf2) << endl; 函数指针作为返回值一个函数的返回值可以是一个函数指针,这个声明形式写起来有点麻烦:// 函数指针作为返回值int (*retFunPointer(int))(constint&, constint&);上面的声明的含义:a) retFunPointer是一个函数,该函数有一个int类型的参数;b) retFunPointer返回值是一个函数指针,它指向的是带有两个const int&类型参数,且返回类型为int的函数。 retFunPointer的定义:// 函数指针为返回值int (*retFunPointer(int aInt))(constint&, constint&){ cout << aInt << endl; // pf已经在前面定义过了 return pf;} 调用代码示例:// 函数指针作为返回值,retFunPointer返回一个cmpFun类型的函数指针cmpFun pf3 = retFunPointer(aaInt);int result = pf3(aaInt, bbInt);cout << result << endl; 包含上面所有情况的完整代码#include<iostream>#include<string>usingnamespace std; // 定义函数指针pfint (*pf)(constint&, constint&); // 定义函数指针类型cmpFuntypedefint (*cmpFun)(constint&, constint&); // 函数指针作为参数int plusFun(int&, int(constint&, constint&));int plusFun(int&, int(*)(constint&, constint&)); // 函数指针作为返回值int (*retFunPointer(int))(constint&, constint&); // 具体函数int intCompare(constint& aInt, constint& bInt){ if(aInt == bInt) return 0; if(aInt > bInt) { return 1; } else { return -1; }} //函数指针作为参数:错误的做法//int plusFun(int& aInt, int& bInt, int paf(const int& cInt, const int& dInt))//{//// return aInt + bInt + paf(cInt, dInt);//} //函数指针作为参数:正确的做法int plusFun(int& aInt, int& bInt, int paf(constint &, constint &)){ int cInt = 2; int dInt = 1; return aInt + bInt + paf(cInt, dInt);} //函数指针作为参数:错误的做法//int plusFun(int& aInt, int(*paf2)(const int& bInt, const int& cInt))//{// return aInt + paf2(bInt, cInt);//} //函数指针作为参数:正确的做法int plusFun(int& aInt, int(*paf2)(constint&, constint&)){ int bInt = 1; int cInt = 2; return aInt + paf2(bInt, cInt);} // 函数指针为返回值int (*retFunPointer(int aInt))(constint&, constint&)</
typedef 函数指针的用法

第二种用法:typedef 原变量类型 别名 简单的函数指针的用法 //形式1:返回类型(*函数名)(参数表)char(*pFun)(int);//typedef char(*pFun)(int) //跟上一行功能等同 /*typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个...

c语言中指针的应用?

指针的主要用法:1. 间接引用变量。2. 指针作为函数的参数。可以在一个函数中,间接引用另一个函数中的变量。3. 用指针处理数组。4. 用指针处理字符串。指针处理字符串,更加灵活、功能强大。5. 指向函数的指针。这些用法中,最有用的是第2项和第4项。选自《C语言程序设计—从入门到进阶》,人民...

如何定义指向函数的指针?

一、定义一个函数指针的方法如下:返回值类型 (* 指针变量名)([形参列表]);1、int func(int x); /* 声明一个函数 */ 2、int (*f) (int x); /* 声明一个函数指针 */ 3、f=func; /* 将func函数的首地址赋给指针f */ 二、函数指针的用法:函数指针的应用:(*指针变量名)(参...

c++的函数指针是怎么用的呀?

int *p(int a, int b); //p是函数名,此函数的返回值类型为整型指针 3) 指向函数的指针变量不是固定指向哪一个函数的,而只是表示定义了一个这样类型的变量,它是专门用来存放函数的入口地址的;在程序中把哪一个函数的地址赋给它,它就指向哪一个函数。4) 在给函数指针变量赋值时,只需给...

具体介绍下指针用法?

指针的用法很复杂,可以写一本书,下面我列一下,指针的三个基本概念 / 第一段函数,说明指针就是地址,指针变量就是存放某个变量地址的变量。/ include &lt;stdio.h&gt; int main (void){ int *p;int a = 5;p = &amp;a;/*指针变量p存放了变量a的地址,也即指针p指向了变量a 但修改p的值不会影响...

急。。请问一下,指向函数的指针有什么特殊的作用吗?为什么要有指向函数...

指针本身所占据的内存区 指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针本身占据了4个字节的长度。 指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。 指针的算术运算 指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的...

函数指针和指针函数用法和区别

函数指针 函数指针则是指针变量,它指向一个函数。声明为类型说明符 (*函数名)(参数),如int (*fun)(int x, int y),区别在于这里的星号是在类型前面,代表它是一个指向函数的指针。函数指针需要明确地给它赋一个函数的地址,调用方式有两种,明确通过指针调用更推荐。区别总结 主要区别在于定义:...

C++语言中,指针的英文单词是什么?

1、函数指针的声明:typedef void (*p)(const char *name):void (*p2)(const char *name):这两种定义方式都是可以的。2、函数指针的使用,如下图所示。3、函数指针的overloading(重载),如下图所示。4、c++11对函数指针写法的简化,c++让人头疼的就是写法多样化,一个意思可以有n多种写法。...

函数指针怎么调用

1、首先打开vs2014,新建一个项目。2、添加头文件。3、添加main主函数。4、定义一个函数addTwoNumbers。5、将addTwoNumbers函数地址赋值给ptr_sum。6、调用函数指针求和。7、运行程序,看看结果。注意事项:因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型...

函数指针和指针函数有啥区别?

一、【函数指针】在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1、函数指针定义 函数类型(*指针变量名)(形参列表);“函数类型”...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
迪奥520属于什么颜色 中航飞机起落架有限责任公司 中航飞机起落架燎原分公司有哪些机械? 各机械分别都加工些什么零件? 陕西汉中城固燎原起落架公司怎么样?我是学数控的想进,该怎么办? 中航飞机起落架燎原分公司职工待遇怎么样 ...第一天上班,没有签劳动合同。是挂靠的物流公司,老板不? ...厂里入了货物险,可物流公司却叫我赔偿,说保险是厂里入 离婚的原因有哪些呢 导致离婚的十大原因分别是什么? 离婚的五大原因? 你们觉得刚开始喝普洱茶,是喝生普好还是熟普好呢? 华为p20 pro可以用beats studio3吗 两条腿疼,好像肌肉酸痛。站一会就感觉累怎么回事啊 美甲顺序是什么呢? 今日头条,标题用场标题好,还是短标题好。 头条号标题怎么写? 含有草字的常见诗句? 《某某》是真的绝版了吗? 洛天依的《某某》的歌词 太保人寿是什么内容 太保人寿是太平人寿么 太保人寿是什么?热 老凤祥的三八妇女节员工从几号能接到活动通知 win7下怎么恢复开机时的一键还原多系统选择菜单 吉他基础 吉他和弦分类,如大三和弦,还要根音,三音,五音,还有个别的七音关系 win7 未连接 连接可用,网络和共享中心打不开, 但是能上网!求大神帮帮忙 win7如何一键修复系统 吉他 到底有多少种和弦 和弦级数第七级和弦一定是减七和弦吗?只有这一种,还是有其他可以代替?比如c的第七级和弦是b减七和弦 怎么用jquery实现菜单的联动 网页打开的速度慢原因? 360贷四万块,一年交利息是多少? c++的函数指针是怎么用的呀? 函数指针(指向函数的指针) 如何使用? 它和回调函数有什么区别呢? 指向函数的指针的用法? 指向函数的指针怎么使用 C 语言中指针函数是如何调用的?? 如何调用指针函数 带指针的函数怎么调用? 工控机里auo代表什么 c语言函数指针怎么用啊?尤其是main函数 c++课程设计 电影院自动售票机 友达AUOA48F和奇美CMN14D5屏幕哪个好 auo12303故障 auo能拼出多少个音节? AUO全称? Auo在运放电路中是什么意思 直接压榨出来的花生油可以直接使用吗?还是需要添加一些什么东西? 为什么叫金闪闪auo?
  • 焦点

最新推荐

猜你喜欢

热门推荐