[C++]函数指针与指针函数
函数指针与指针函数,之前总是分不清,今天就好好把它两认认清楚。
先从概念说起,简单是理解。
函数指针:是指针。一个指向某一个函数入口地址的指针。
指针函数:是函数。一个返回值是指针的函数。
记忆:
从语文的角度讲,这俩个概念的主语在后,定语在前。
函数指针的主语是指针,而函数是指针的定语
指针函数的主语是函数,指针是定语。
如何声明和定义:
声明一个函数指针分为两部:
1.先声明一个你想指向的函数的原型
returnValue FuncName(Arg1,Arg2.....);
例如:
double DoSomething(int nArg1,int nArg2);
2.把函数原型中的函数名换成(*pf_FuncName)
例如:
double (*pf_DoSomething)(int nArg1,int nArg2);
3.Over
现在我们就声明了一个指针pf_FuncName,它指向函数FuncName的函数入口地址
例如:
pf_DoSomething就是一个指针,而使用解除引用操作符*修饰它之后,它就是函数本身(*pf_DoSomething)就是函数本身
一个小例子:
//普通函数
int sum(int nNum1,int nNum2);
int sum(int nNum1,int nNum2)
{
return nNum1+nNum2;
}; //函数指针例子
int DoSum(int nNum1,int nNum2,int (*sum)(int a,int b));
int DoSum(int nNum1,int nNum2,int (*sum)(int a,int b))
{
return (*sum)(nNum1,nNum2);
}; //指针函数例子
int* newSum(int nNum1,int nNum2);
int* newSum(int nNum1,int nNum2)
{
int* result = new int;
(*result) = nNum1+nNum2;
return result;
}; int main(int argc, const char * argv[])
{ // insert code here...
std::cout << "Hello, World!\n"; int result = sum(1, 2);
int doSumResult = DoSum(2,3,sum); std::cout << "result:" <<result <<endl;
std::cout << "doSumResult:" <<doSumResult <<endl; int* newResult = newSum(3, 4);
std::cout << "newResult:" << (*newResult) <<endl;
delete newResult; return 0;
}
运行结果 :
Hello, World!
result:3
doSumResult:5
newResult:7
[C++]函数指针与指针函数的更多相关文章
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- cocos2dx 3.x(获得父类的node型指针调用父类函数this->getParent())
void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(Gam ...
- 对线程等待函数pthread_join二级指针参数分析
分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...
- C语言指针变量作为函数参数
0x01 指针变量作为函数参数的作用是:将一个变量的地址传送到另一个函数中. 0x02 简单的例子:虽然都能实现功能,但意义不同. 正确的写法: #include <stdio.h> vo ...
- 函数指针与指针函数以及typedef
c难于理解的是指针,其魅力之处也是指针,函数方法结构,化繁为简可以理解为:返回值 函数名(形参表),具体来说: 返回值:1.可以为空void 2.基本数据类型char short int long f ...
- [Reprint]C++普通函数指针与成员函数指针实例解析
这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...
- C++ 必知必会:条款16 指向成员函数的指针并非指针
这一点与指向成员的指针类似,其实现可能更加复杂,因为成员函数同时还存在虚拟函数,需要动态绑定执行动作.当然这种属性是属于函数本身的,此处表达的是指针不涉及函数的属性问题. 1: class shape ...
- C:函数指针、回调函数
函数指针 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址.数组名就是数组的首地址,函数名就是函数的首地址.与数组类似. 代码demo int (*p) (int ,in ...
- C++函数的传入参数是指针的指针(**)的详解
要修改变量的值,需要使用变量类型的指针作为参数或者变量的引用.如果变量是一般类型的变量,例如int,则需要使用int 类型的指针类型int *作为参数或者int的引用类型int&.但是如果变量 ...
- C++数组(指针)作为函数参数
本文的学习内容参考:http://blog.csdn.net/wwdlk/article/details/6322843 1.当用数组名作为函数参数时,函数的实参和形参都应为数组名(或者指针): Ex ...
随机推荐
- Android XML解析器的问题
最近在项目中遇到了一个解析XML的问题,我们是用android自带的DOM解析器来解析XML的,但发现了一个android的问题,那就是在2.3的SDK上面,无法解析像<, >, 等字符串 ...
- [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面
cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...
- 用 Asterisk 搭建自己的免费 VoIP 服务器
原文 http://www.yaoblog.info/?p=5021 1. 这里以 Debian 为例子,安装 Asterisk apt-get update apt-get install aste ...
- C++ 库研究笔记——通过inline避免hpp 的mutiple definition 错误
C++用了这么多年,这个却第一次知道,以前没用过hpp 这样: // foo.hpp void foo() { /* body */ } // a.cpp #include "foo.hpp ...
- Linux中TCP wrapper的使用
Linux中TCP wrapper的使用 tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念: 服务监听的两种方式: listen ...
- 阿根廷探戈(Argentine Tango)舞步
阿根廷探戈(Argentine Tango)舞步 阿根廷探戈(Argentine Tango)舞步 2011-11-22 13:05:11 不像其它大部分的社交舞,阿根廷探戈没有固定的舞步,它是一 ...
- LA 3942 Remember the Word(前缀树&树上DP)
3942 - Remember the Word Neal is very curious about combinatorial problems, and now here comes a pro ...
- 用xerces-c来进行xml schema校验
在xerces-c的官方站点上有文章指引说明是怎样进行xml schema校验. http://xerces.apache.org/xerces-c/schema-3.html 给出的样例代码: // ...
- python发送各类邮件的主要方法
更多详见: http://www.w3cschool.cc/python/python-email.html python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法 ...
- Windows server 2008 R2实现多用户远程连接
原文 Windows server 2008 R2实现多用户远程连接 经常使用远程桌面的朋友可能会注意到,Windows server 2008 R2中,远程桌面最多只允许两个人远程连接,第三个人就无 ...