问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样用函数指针做参数?

发布网友 发布时间:2022-04-23 18:40

我来回答

2个回答

热心网友 时间:2023-11-03 07:55

列了几个简单的应用:

//形式1:返回类型(*函数名)(参数表)
#include<cstdio>
char (*pFun)(int);

char glFun(int a){printf("just a test,hehe\n"); return 'a';}

void main()

{

pFun = glFun;

(*pFun)(2);

}

//形式2:typedef 返回类型(*新类型)(参数表)
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}

//形式三
#include<iostream>
using namespace std;
class CA
{
public:
char lcFun(int a){cout<<"just a test "<<a<<endl; return 'a'; }
};

typedef char (CA::*PTRFUN)(int);

int main()
{
CA ca;
PTRFUN pFun;
pFun=&CA::lcFun;
//ca.lcFun(2);
(ca.*pFun)(2);
return 0;
}

热心网友 时间:2023-11-03 07:56

函数的指针可以作为一个参数传递给另外一个函数,这一点非常有意思。一个函数用函数指针作参数,意味着这个函数的一部分工作需要通过函数指针调用另外的函数来完成,这被称为“回调(callback)”。处理图形用户接口的许多C库函数都用函数指针作参数,因为创建显示风格的工作可以由这些函数本身完成,但确定显示内容的工作需要由应用程序完成。
举一个简单的例子,假设有一个由字符指针组成的数组,你想按这些指针指向的字符串的值对这些指针进行排序,你可以使用qsort()函数,而qsort()函数需要借助函数指针来完成这项任务(关于排序的详细介绍请参见第3章“排序和查找”。qsort()函数有4个参数:
(1)
指向数组开头的指针;
(2)
数组中的元素数目;
(3)
数组中每个元素的大小;
(4)
指向一个比较函数的指针。
qsort()函数返回一个整型值。
比较函数有两个参数,分别为指向要比较的两个元素的指针。当要比较的第一个元素大于、等于或小于第二个元素时,比较函数分别返回一个大于o,等于。或小于。的值。
排序算法和交换算法都是qsort()函数的部分内容。qsort()函数的交换算法代码只负责拷贝指定数目的字节(可能调用memcpy()或memmove()函数),因此qsort()函数不知道要对什么样的数据进行排序,也就不知道如何比较这些数据。比较数据的工作将由函数指针所指向的比较函数来完成。
对本例来说,不能直接用strcmp()函数作比较函数,其原因有两点:第一,strcmp()函数的类型与本例不符(见下文中的介绍);第二,srtcmp()函数不能直接对本例起作用。strcmp()函数的两个参数都是字符指针,它们都被strcmp()函数看作是字符串中的第一个字符;本例要处理的是字符指针(char
*s),因此比较函数的两个参数必须都是指向字符指针的指针。
为什么不能直接将strcmp()函数传递给qsort()函数呢?为什么strpcmp()函数中的参数是如此一种形式呢?因为函数指针的类型是由它所指向的函数的返回值类型及其参数的数目和类型共同决定的,而qsort()函数要求比较函数含两个const
void
*类型的参数:
qsort()函数不知道要对什么样的数据进行排序,因此,base参数和比较函数中的两个参数都是void指针。这一点很容易理解,因为任何指针都能被转换成void指针,并且不需要强制转换。但是,qsort()函数对函数指针参数的类型要求就苛刻一些了。本例要排序的是一个字符指针数组,尽管strcmp()函数的比较算法与此相符,但其参数的类型与此不符,所以在本例中strcmp()函数不能直接被传给qsort()函数。在这种情况下,最简单和最安全的方法是将一个参数类型符合qsort()函数的要求的比较函数传给qsort()函数,而将比较函数的参数强制转换成strcmp()函数所要求的类型后再传给strcmp()函数;strpcmp()函数的作用正是如此。
不管是强制转换strpcmp()函数的参数的类型,还是强制转换指向strcmp()函数的指针的类型,你都必须小心进行,因为稍有疏忽,就会使程序出错。在实际编程中,转换函数指针的类型更容易使程序出错。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
lv的包为什么会变硬? LV包包的材质和工艺有何独特之处? 中国蓝姓有多少人? 女生文雅名字 女生文雅名字 一个字 手饰怎么造句 一串什么一年级 手链造句 我载着无奈的生活说说,我不能放弃 银行卡四要素是什么?是如何验证的? 银行卡验证的四要素是什么? 用指针变量作为函数参数 新买的铁锅上面有黄油怎么去掉啊 炒菜锅用久了,锅上积存的油垢很难清除掉,炒菜锅的油垢如何清洗? 炒菜锅,用哪种清洗剂,能去除油污? 我从商家那里买了一口锅他涂了一层黄油应该怎样才能去掉呢? 锅上粘的时间长了沾到黄油怎么洗呢时间? 宝石蓝的外套应该搭配什么颜色的卫衣。 宝石蓝的长款开衫搭配什么颜色的短裙好看? 宝蓝色与什么颜色搭配 【宝蓝色搭配什么颜色】 武汉新荣村客运站有到薄刀峰的车吗 宝蓝色搭配什么颜色最好看 宝蓝色衣服搭配技巧 韩文语法 请教下,香蕉的量词用什么 今天去天薄刀峰要预约吗? 宝石蓝配什么颜色好看 香蕉单位是什么 怎么去大别山薄刀峰玩好? 宝石蓝虎皮配什么颜色好? 坐车到薄刀峰车票多少 罗田薄刀峰风景区攻略 什么是指针做函数参数 指针作为函数的参数的定义方法 指针做函数参数时传递的是什么 c语言中用指针变量做函数参数有什么意义? 在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事? C语言中指针变量作为函数参数和一般变量作为函数参数的区别 c++利用指针做函数参数 C语言中指针作为函数参数的问题。 c语言指针的指针做函数参数 C语言 指针做函数参数 的优点 指针作为函数参数时,如何实现两个数的交换 这道题为什么要用指针作为函数参数?不用不可以吗?编程,c++ c语言中用一个函数指针作为另一个函数的参数,该怎么解决 结构体指针作为函数参数 梦见好朋友和她男神在一起了 梦见自己喜欢的人和别人在一起,这意味着什么 梦见追了很久的男神喜欢我了,现实生活中他和别人在一起,梦里他们分手了他来找我了 梦见自己喜欢的男生和别人在一起 梦见男神和别人说话,不理自己,气得直哭是什么意思 梦见男神和一个陌生男人在唱歌