C++它 typedef void *HANDLE
阅读时编写代码的代码,经常看到一个代码: typedef void *HANDLE ,这是它背后的故事?怎么理解呢?
不明白的时候。这是非常美妙的感觉,后来我才知道这,这是typedef定义,就在void*键入罢了。那是,HANDLE相当于void *,们能够叫它披着句柄皮的指针(PS:指针和句柄是有差别的,在这说句废话);
对于void* 神通广大。由于它作为函数參数or函数返回值,可以接受不论什么类型的指针;也就是来者不拒,是指针就接受(so open ,Aha)。但应用的时候。应该注意,void * 必须指向详细的类型。比如:
void * HappyPt;
int* pi=static_cast<int*>HappyPt;; //注意喽,在这里详细到了int*哦!
详细使用方法例如以下所看到的:
1.还记得它吗?
void * __cdecl memset(_Out_opt_bytecapcount_(_Size) void * _Dst, _In_ int _Val, _In_ size_t _Size);
这是memset这个函数的原型,在这里你能够毫不留情的把void* 换成HANDLE,memset就是为了将传递进来的地址開始的n个字节的值所有赋值成某个特定的值,所以不是必需知道是什么类型的指针。就用void类型指针取代了。
用作參数的时候,我们一般不关心传递进来的地址类型;
用作返回值的时候。通常是返回一个地址,至于这个地址你要做什么用那是你决定的。最常见的就是malloc了,它返回void类型指针作为分配好的内存区的首地址。至于是什么类型,就须要用户自己来指定了。
演示样例
typedef void *HANDLE;
HANDLE m_exitThreadEvent;
m_exitThreadEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPTSTR lpName
);
C++它 typedef void *HANDLE的更多相关文章
- 如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- typedef void(*Fun)(void);
typedef void(*Fun)(void); 函数类似于数组,函数名就是它的首地址: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- 函数指针-如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- typedef void(*Func)(void)的简单用途
typedef void(*Func)(void)的用途 用法的好处: 定义一个函数指针类型. 例子: 有三个类型相似或功能相似的函数: void TASK1(void) { printf(" ...
- NRF51822+STM32bootload——typedef void (*Fun) (void) 理解
1.typdef 用法如下所示 typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned ...
- typedef void (*funcptr)(void)的含义
fun a;//等价于void (*a)(); 这样声明起来就方便多了 void (*a)();表示a是个指针,指向一个不带参数.返回值为空的函数 定义一个函数指针类型. 比如你有三个函数: void ...
- typedef void(*Fun) (void)是什么意思 函数指针(回调函数) 和函数对象总结
https://blog.csdn.net/FreeApe/article/details/49124043 bool (*pf)(const string &,const string &a ...
- typedef void (*funcptr)(void) typedef void (*PFV)(); typedef int32_t (*PFI)();
看到以下代码,不明白查了一下: /** Pointer to Function returning Void (any number of parameters) */ typedef void (* ...
- typedef void (*sighandler_t)(int);
typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); ---------- ...
随机推荐
- 二分图行列匹配---> hdu2119,hdu1498
hdu2119 题意:给定一个矩形方格,每个格子里面的数字是0或者1,每次操作可以把一整行或列的1变成0,问最少多少次操作能将1全部变为0 一次可以消除某一行或者某一列的1但是可以这么想,最多有多少个 ...
- 使用gSoap规避和改动ONVIF标准类型结构的解析
ONVIF/gSoap依赖关系及问题 ONVIF是一组服务规范,标准參考 gSoap是一套基于实现SOAP通信接口的工具链 即是,当我们须要訪问ONVIF的Web Service或实现对ONVIF部分 ...
- Linux游(1): diff, patch和quilt (下一个)
Linux游(1): diff, patch和quilt (下一个) 2 quilt 我们自己的项目可以用cvs或svn管理所有代码.但有时我们要使用其它开发人员维护的项目.我们须要改动一些文件.但又 ...
- 我的学习笔记_Windows_HOOK计划 2009-12-03 11:19
一.什么是HOOK? "hook"这个单词的意思是"钩子","Windows Hook"是Windows消息处理机制的一个重要扩展,程序猿能 ...
- wpa/wpa2破解系统(CDlinux)U盘启动傻瓜教程
CDlinux是破解无线wifi信号的很好用的系统.它就像一个PE,不过它是基于Linux内核的微型系统.里面的破解工具很齐全,既有传统的抓包工具,也有最新的PIN码破解软件,而且针对windows用 ...
- 谈论高并发(二十二)解决java.util.concurrent各种组件(四) 深入了解AQS(二)
上一页介绍AQS其基本设计思路以及两个内部类Node和ConditionObject实现 聊聊高并发(二十一)解析java.util.concurrent各个组件(三) 深入理解AQS(一) 这篇说一 ...
- Mac下改动Android Studio 所用的JDK版本号
Mac下改动Android Studio 所用的JDK版本号 @author ASCE1885 近期项目从Eclipse+Ant构建模式转移到了Android Studio+Gradle构建模式.自然 ...
- C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】
STL实践与分析 --概述.初窥算法[上] 标准库容器定义的操作很少.并没有给容器加入大量的功能函数.而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是"泛型"的. ...
- 重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件
原文:重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件 [源码下载] 重新想象 Windows 8 Store Apps ( ...
- javascript 正则匹配 提取所有 preg_match_all matchAll方法
javascript 提取全部的的方法.javascript中没有matchAll这种方法. 用while来实现类似 PHP 中的preg_match_all() :(by default7#zbph ...