typedef void* HANDLE 什么意思

C中的语法是什么意思,搞不懂
2024-12-30 01:05:36
推荐回答(4个)
回答1:

void 是内置关键字, *表示指针。
void * 定义一个指向void类型的指针,这个是C内置定义好了的。
HANDLE字面义是句柄,被很多操作系统上抽象使用,作为一个可以进行操作的对象。
HANDLE不是C/C++内部定义的关键字。
但是我们在做开发的时候,希望做一个抽象,将“句柄”抽象出来,在程序里用void * 来构建。
但是如果每次写到“句柄”,就要写一个void*,这样还是基础语言,没有往自然语言的角度抽象,又麻烦,理解起来也差了点意思,所以,就有了这个写法:
typedef这个也是一个关键字,他的作用是转义。
typedef void* HANDLE
定义了一个void*类型,转义为HANDLE。
这样,你可以直接用HANDLE来实现具有自然语言意义上的抽象,如前文所言,人在开发程序时,可以直接使用“句柄”这个对象。
但是对于计算机而言,它只认识void *,它会自动将你写得HANDLE理解为void*。
这就是typedef这个关键字的意义了,简单的说,用基础预制类型定义无限的抽象类型,以更方便开发者工作。

回答2:

这儿应该涉及到void * 指针的问题
一个指向任何对象类型的指针都可以赋值给类型为void*的变量,如果使用了void*,我们就必须显式地将它转换到某个指向特定类型的指针。
例如,void * pv
int* pi=static_castpv //显式的转换回int*
void*最重要的用途是对需要的函数传递一个指针,而且不能对对象的类型做出任何假设;或者是从函数中要返回一个无类型的对象
采用void*的函数通常位于系统中的底层。

就楼主的这个问题,HANDLE是指针名,typedef是变量类型名
使用起来具体如:int void* HANDLE
这个用法很奇怪。。如果这么使用,为何不直接写int* HANDLE ?

回答3:

定义一个无返回值的句柄

回答4:

  语法
  typedef void *HANDLE;
  含义
  就是用HANDLE来代表void*,也可理解为 HANDLE == void*
  void类型的指针表示可以指向任意类型的数据,但是void类型指针不能直接使用,使用前必须先转换成某种确定的类型。如:
  void * pv;
int* pi=static_castpv; //显式的转换回int*
  void类型指针可以用在函数的参数或返回值里。
  用作参数的时候,我们一般不关心传递进来的地址类型,比如memset这个函数的原型,memset就是为了将传递进来的地址开始的n个字节的值全部赋值成某个特定的值,所以没必要知道是什么类型的指针,就用void类型指针代替了。
  用作返回值的时候,一般是返回一个地址,至于这个地址你要做什么用那是你决定的,最常见的就是malloc了,它返回void类型指针作为分配好的内存区的首地址,至于是什么类型,就需要用户自己来指定了。