- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
这篇文章把函数指针的各种常用情况做了一个详解的总结。1.?指向普通函数的指针很简单,如下的例子可以说明基本格式和用法:int int_add(int a, int b)
{
return (a+b);
}
int int_sub(int a, int b)
{
return (a-b);
}
int (*int_operator)(int, int) = int_add;
int _tmain(int argc, _TCHAR* argv[])
{
coutint_operator(4, 5)endl; // output 9
int_operator = int_sub;
coutint_operator(4, 5)endl; // output -1 return 0;
}
上例中,int_operator会被编译器解释成类型int(*)(int, int)的一个指针。
调用方式还可以写作:(*int_operator)(4, 5),这样的好处是让人一眼就能看到int_operator是一个函数指针。
注意:函数指针和指向函数的返回值的类型和参数都必须严格一致;2.?函数指针数组我们还可以声明一个函数指针的数组,比如:
int (*pFuncArray[10])();
[]的优先级高于*,该语句将pFuncArray声明为拥有10个元素的数组,每一个元素都是指向一个函数的函数指针,该函数没有参数,返回值类型为int;注意不能写作:int ((*pFuncArray)[10])(),这样会产生编译错误;
(*pFuncArray)[10]表明了pFuncArray是一个指针,该指针指向一个’含有?10个元素的数组’;
其类型为int()(),显然,编译不能通过。将上面的声明转换为typedef格式,会使程序可读性增加:
typedef int(*pFunc)();
pFunc pFuncArray[10];
如果需要调用其中的第三个函数,那么调用方式为:pFuncArray[2]();3.?指向‘函数指针数组’的指针
还可以声明一个指向‘函数指针数组’的指针,比如下面的例子代码:int cmp_len(const char *str1, const char *str2)
{
return ((int)strlen(str1) - (int)strlen(str2));
}
int cmp_str(const char *str1, const char *str2)
{
return strcmp(str1, str2);
}
typedef int(*PCMP_FUNC)(const char*, const char*);
PCMP_FUNC pCmpFuncs[2] =
{
cmp_len,
cmp_str,
};
// 声明指向pCmpFuncs的指针 PCMP_FUNC (*ppCmps)[2] = pCmpFuncs;?
声明分解说明如下:
(*ppCmps):表明ppCmps是一个指针;
(*ppCmps)[2]:后面紧跟[2],表明ppCmps是一个指向‘两个元素数组’的指针
PCMP_FUNC表明了该数组元素的类型,它是指向函数的指针,返回值为int,有两个const char*类型的参数;
实际上语句PCMP_FUNC?(*ppCmps)[2] = pCmpFuncs;
将会被编译器解释为:
int?(*(*ppCmps)[2])(const?char*,?const?char*) = pCmpFuncs;
声明分解:
(*ppCmps):表明ppCmps是一个指针;
(*ppCmps)[2]:后面紧跟[2],表明ppCmps是一个指向‘两个元素数组’的指针
int (*)(const char*, const char *):表明了该数组元素的类型,它是指向函数的指针,返回值为int,有两个const char*类型的参数;
?
3.?函数指针与类在C++语言中,使用函数指针可以指向类的一个成员函数或变量,虽然这种用法很少能用到,至少我是没有用过,不过了解一下还是有点必要的。
为了支持这类指针,C++有三个特殊的运算法符:::*,.-,.*;
指向成员函数的指针必须与向其赋值的函数类型匹配,这包括:1)参数的类型和个数;2)返回值类型;3)它所属的类型;
指向成员变量的指针必须与向其赋值的变量类型匹配,这包括:1)变量类型;2)它所属的类型;
成员函数和变量必须被绑定到一个对象或者指针上,然后才能得到调用对象的this指针,然后才能指向成员变量或函数;
类AClass的成员变量int m_iValue,其完整类型是:int型的类AClass的成员m_i
您可能关注的文档
最近下载
- 26. 26个英文字母-复习课件-1字母闯关游戏(共30张PPT).pdf VIP
- 上海市职业技能等级认定试卷 模具工(四级)考场、考生准备通知单02.doc VIP
- 健康险手册使用说明.pptx VIP
- 急性心肌梗死诊断及治疗课件.ppt VIP
- 饲料添加剂项目企业经营战略手册(参考).docx
- 光伏电站项目建设方案.docx
- 数字智慧方案5496丨商业综合体地块智能化系统设计汇报方案(66页PPT).pptx VIP
- 体例格式9:工学一体化课程《小型网络安装与调试》任务1学习任务工作页.docx VIP
- 城投集团防汛防台专项应急预案(2018版).docx VIP
- 量子之年:从2025年从概念到现实报告(英文版).pdf VIP
文档评论(0)