我们知道,在 C 语言中,NULL 通常被定义为:#define NULL ((void *)0) 所以说 NULL 实际上是一个空指针,如果在 C 语言中写入以下代码,编译是没有问题的,因为在C语言中把空指针赋给 int 和 char 指针的时候,发生了隐式类型转换,把 void 指针转换成了相应类型的指针。 1int*pi=NULL; 2char*pc=NULL; 1...
INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系 一、INVALID_HANDLE_VALUE 1、源码 1//WinNT.h2typedefvoid*HANDLE;3//BaseTsd.h4typedef _W64longLONG_PTR, *PLONG_PTR;5//WinBase.h6#defineINVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1) 2、解析 (1)HANDLE 实际上是 void 指针类型,-1 经...
BOOL WINAPI CloseHandle(__in HANDLE hObject); 1. 是该函数仅仅释放掉句柄对应的内核对象,其本身的值没有变化,故需要将其复位,这里就用到了INVALID_HANDLE_VALUE 。其实其用法与释放指针时为了避免“野指针”的存在,将指针赋值NULL、nullptr的方法是一样的。
BOOL WINAPI CloseHandle(__in HANDLE hObject); 1. 是该函数仅仅释放掉句柄对应的内核对象,其本身的值没有变化,故需要将其复位,这里就用到了INVALID_HANDLE_VALUE 。其实其用法与释放指针时为了避免“野指针”的存在,将指针赋值NULL、nullptr的方法是一样的。