C++指向函数的指针用法详解
本文以实例形式展示了C++指向函数的指针用法,是深入学习C++所必须掌握的关键知识点。分享给大家供大家参考之用。具体方法如下:
函数指针
现来看看以下声明语句,看看其含义:
float (*h(int, void (*)(int)))(int);
以下是一个变量指针的定义语句:
float* pf;
以下是一个普通函数的声明语句:
float f();
请看以下声明语句:
float* g();
因为()的优先级高于*, 所以相当于:
float* (g());
g是一个函数, 返回值为float*, 参数为void
而
float (*h)();
中, h是个指针, 指向一个返回值为float的函数.
去掉h, 就是h的类型:
float (*)();
若要调用h所指的函数, 解引用这个指针即可:
(*h)();
它的缩写为(注意, 仅仅是缩写):h();
注意不能将(*h)两边的括号去掉, 去掉后,*h()等价于*(h()). ANSI C会把它认为是以下语句的缩写:
*((*h)());
上面的语句表示: 执行h所指向的函数, 然后解引用函数的返回值.
若h指向的函数有参数, 参数是指向函数的指针呢? 假设该参数的类型为: void (*)(int), 则h可以声明为:
float (*h)(void(*)(int));
已知有以下函数的声明:
float func(int);
若要使h指向函数func, 只需要将(*h)替换func即可:
float (*h)(int);
更进一步, h所指的函数不返回float, 而是返回指向函数的指针呢? 该指针的类型为float(*)(int).
float (*h(parameter))(int);
其中parameter为h所指函数的参数, 假设参数类型有两个, 一个为int型, 一个类型为: void (*)(int), 则最终的结果为:
float (*h(int, void (*)(int)))(int);
希望本文所述对大家的C++程序设计有所帮助。
相关推荐
-
C++模板类的用法实例
本文实例讲述了C++中模板类的用法,分享给大家供大家参考.具体方法如下: //#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public: CSimpleList(int nNextOffset=0); void Construct(int nNextOffset); //接口 BOOL IsEmpty() const; voi
-
C++模板类的用法
本文实例讲述了C++模板类的用法,分享给大家供大家参考.具体实现方法如下: main.h头文件如下: 复制代码 代码如下: template <class T> class actioncontainer { public: //构造函数 actioncontainer() { m_nRedoPos = 0; m_nUndoPos = 0; } //容器的接口函数 void add(T val
-
C++之boost::array的用法
本文实例讲述了C++之boost::array的用法,分享给大家供大家参考.具体如下: 复制代码 代码如下: #include <string> #include <iostream> #include <boost/array.hpp> #include <algorithm> using namespace std; int main() { boost::array<int, 5> array_temp = {{12,
-
C++采用TLS线程局部存储的用法实例
本文实例讲述了C++采用TLS线程局部存储的用法.分享给大家供大家参考. 具体方法如下: 复制代码 代码如下: // useTLS.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include <process.h> //声明 VOID InitStartTime(); DWORD GetUserTime(); //TLS索引,作全局变量 DWO
-
C++中DeviceIoCteatol的用法实例
本文是一篇译文,主要以实例形式讲述了C++中DeviceIoCteatol的用法.分享给大家供大家参考.具体方法如下: 应用程序代码如下: 复制代码 代码如下: DWORD dwBytesReturned = 0; BYTE bytBuffer_1[512]; BYTE bytBuffer_2[512]; CHAR string[2048]; HANDLE hDevice, hDriver; BOOL bRet; bRet = DeviceIo
-
C++位操作的常见用法小结
本文以实例形式对C++位操作的常见用法进行了总结.分享给大家供大家参考之用.具体方法如下: 在C++中位操作有6种基本操作符,按照优先级分别是: 取反 - 移位 << >> 与 & 异或 ^ 或 | 常用的用法有: 1 判断偶数,判断最低位是0还是1即可,比求模快 x % 2 != 0 //x正负都可以判断:不用x%2 == 1,因为如果x为负奇数,x%2=-1 x & 0x1 == 0 2 交换两个数,不用中间变量 void my
-
C++中Semaphore内核对象用法实例
本文实例讲述了C++中Semaphore内核对象的用法,分享给大家供大家参考.具体方法如下: 复制代码 代码如下: // Semaphore.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include <process.h> HANDLE g_hSemaphore; DWORD g_nConut1 = 0; DWORD g_nConut2 = 0;
-
C++采用openfilename打开文件对话框用法实例
本文实例讲述了C++采用openfilename打开文件对话框用法,分享给大家供大家参考.具体方法如下: 这里需要注意,有的时候会因为没设置nMaxFile,而一直不出现对话框. 具体功能代码如下: 复制代码 代码如下: char szFileName[MAX_PATH]={0}; OPENFILENAME openFileName = {0}; openFileName.lStructSize = sizeof(OPENFILENAME); openFileName.nMaxFile =
-
浅析C/C++中sort函数的用法
sort是STL中提供的算法,头文件为#include<algorithm>以及using namespace std; 函数原型如下: template <class RandomAccessIterator> void sort ( RandomAccessIterator first, RandomAccessIterator last ); template <class RandomAccessIterator, class Compare> void sor
-
C++友元(Friend)用法实例简介
相对于Java而言,友元是C++中特有的一种元素,很多教材上对其介绍的相对较少,因此初学的时候往往不能很快掌握,本文总结了友元的用法和一些注意的地方,供大家参考借鉴.希望能对初学C++的朋友起到一点帮助作用. 操作步骤: 1)在MyFriend类中,将Father类定义成友元 2)写一个Son类继承自Father类 3)在Father类和Son类的构造函数中分别创建MyFriend对象,并定义其内部的三个变量 4)在MyFriend类的构造函数中创建Father对象,并定义其内部的三个变量 结果
-
C++中extern "C"的用法
学习过C++的人都知道,extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.这里起到的是声明作用范围的用处.另外,extern还可以与"C"连用,作为链接指示.本文就此进行实例说明如下: 一.C++名字修饰(Name Mangling) 首先需要从C++的重载说起,在C++中函数重载指的是几个函数的函数名相同,参数列表不同.那么当生成obj中间文件/目标文件的时候,C++编译器如何区分这几个重载函数呢?可以
-
C++类中的static和const用法实例教程
static和const是C++程序设计中非常重要的概念,本文实例列举了C++类中的static和const的规则和用法.供大家参考借鉴.具体说明如下: 首先以代码用来举例说明.示例代码如下: class A { public: A():m(10) //const成员必须在构造函数的初始化构造列表中初始化 { q = 40; } void fun1()const { m++; //错误.const成员是常量,不能改变其值. n++; //正确.static变量n属于类,但是每个对象的函数都可以访
随机推荐
- Dreamweaver超级技巧之文字特效
- 正则表达式简介及在C++11中的简单使用教程
- 剖析Asp.Net路由系统实现原理
- Asp.NET生成各种网页快捷方式的代码(桌面url快捷方式,收藏夹/开始菜单快捷方式)
- 推荐个功能齐全的发送PHP邮件类
- Python存取XML的常见方法实例分析
- 日期函数扩展类Ver0.1.1
- Android中 service组件详解
- 原生JS分页展示效果(点击分页看效果)
- asp.net 分页链接方法
- DeDecms中利用关键词实现简单tag功能的php代码
- ajaxControlToolkit AutoCompleteExtender的用法
- js获取浏览器和屏幕的各种宽度高度
- 用户IIS APPPOOL\DefaultAppPool登录失败的解决方法
- Python中os.path用法分析
- Yii框架实现图片上传的方法详解
- Android DragImageView实现下拉拖动图片放大效果
- python实现数据库跨服务器迁移
- Mysql提升大数据表拷贝效率的解决方案
- python实现websocket的客户端压力测试