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++中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++类中的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属于类,但是每个对象的函数都可以访
-
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++中extern "C"的用法
学习过C++的人都知道,extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.这里起到的是声明作用范围的用处.另外,extern还可以与"C"连用,作为链接指示.本文就此进行实例说明如下: 一.C++名字修饰(Name Mangling) 首先需要从C++的重载说起,在C++中函数重载指的是几个函数的函数名相同,参数列表不同.那么当生成obj中间文件/目标文件的时候,C++编译器如何区分这几个重载函数呢?可以
-
C++友元(Friend)用法实例简介
相对于Java而言,友元是C++中特有的一种元素,很多教材上对其介绍的相对较少,因此初学的时候往往不能很快掌握,本文总结了友元的用法和一些注意的地方,供大家参考借鉴.希望能对初学C++的朋友起到一点帮助作用. 操作步骤: 1)在MyFriend类中,将Father类定义成友元 2)写一个Son类继承自Father类 3)在Father类和Son类的构造函数中分别创建MyFriend对象,并定义其内部的三个变量 4)在MyFriend类的构造函数中创建Father对象,并定义其内部的三个变量 结果
-
浅析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++中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++采用TLS线程局部存储的用法实例
本文实例讲述了C++采用TLS线程局部存储的用法.分享给大家供大家参考. 具体方法如下: 复制代码 代码如下: // useTLS.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include <process.h> //声明 VOID InitStartTime(); DWORD GetUserTime(); //TLS索引,作全局变量 DWO
-
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++模板类的用法
本文实例讲述了C++模板类的用法,分享给大家供大家参考.具体实现方法如下: main.h头文件如下: 复制代码 代码如下: template <class T> class actioncontainer { public: //构造函数 actioncontainer() { m_nRedoPos = 0; m_nUndoPos = 0; } //容器的接口函数 void add(T val
-
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
随机推荐
- javascript动态添加删除tabs标签的方法
- Cross-domain 策略文件详解
- 将2003里多用户目录与IIS里的FTP对等起来,互相通用
- Redis 集成Spring的示例代码(spring-data-redis)
- .NET微信公众号获取OpenID和用户信息
- js实现鼠标悬浮给图片加边框的方法
- PHP中基本符号及使用方法
- 用asp获取微软安全更新列表的代码 小偷程序
- Android学习笔记-保存数据到SQL数据库中(Saving Data in SQL Databases)
- 基于Android CALL && SendMes Test的相关介绍
- js事件(Event)知识整理
- ASP代码的对象化
- java仿Servlet生成验证码实例详解
- PHP中你应该知道的require()文件包含的正确用法
- JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
- JQuery 选项卡效果(JS与HTML的分离)
- jQuery EasyUI 的EasyLoader功能介绍
- Spring Boot实现邮件注册功能示例代码
- Win2003环境下的一键系统安全批处理
- asp.net 用户控件中图片及样式问题
