typedef void far *LPVOID 的具体定义

首先这里的far,在32位系统已经废除不用了。它是C/C++语言在16位系统中用以标明指针是个远指针的修饰符。

远指针是说指针所指向的地址已经超出了64K(2的十六次方),所以需要使用DS加偏移量的方法来寻址,而不能直接寻址。其反义的修饰符是near。

举例:

int far *fptr;      
      fptr=(int far*)0xb0000000;

16位PC机的存储器地址是由段地址和偏移地址组合而成,每一段不能超过64k字节地址,因而同一个段内的地址存取,用偏移地址就可以实现,因段地址寄存器所存的段地址是不变的。当用指针时,只16位就够了,这一类就是near指针。当要在另一个段内取数据,就要跨越段,即要指明存取段的段地址和偏移地址,这时段地址寄存器所存段地址要改变,在使用指针指向另一个段内地址时,就要用32位表示,就是far指针了。由此可见,如果你想写在Win16上也能运行的程序,才会涉及到newr、far指针的概念。在Win32上,指针已无near、far的区分。

LPVOID 在MSDN上的定义:A 32-bit pointer to an unspecified type.  32位上未指明的类型。

例子:

HANDLE ThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, this, 0, NULL); //线程回调函数this这里可以传任何变量。
DWORD WINAPI MyClass::ThreadProc(LPVOID Param)
{
//这时候传进来什么类型,Param就是什么类型。
return 0;
}

时间: 2024-10-12 04:12:33

typedef void far *LPVOID 的具体定义的相关文章

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 22 23 24 25 26 27 28 29 30 31 int i;             // 定义了一个int类型的变量i: 而这样 typedef INT int;   // 表示用户自己定义了一个整型数据类型INT,实际上就等同于int 所以:INT ii:                    // 表示定义了一个int类型的变量ii

关于typedef void (*funcptr)(void)问题

一.看了一下H.264硬解代码,发现有类似这种方式的定义: typedef void (*exec_ref_pic_marking_adaptive_mmco_func)( GstVaapiDecoderH264  *decoder, GstVaapiPictureH264  *picture, GstH264RefPicMarking *ref_pic_marking ); static const exec_ref_pic_marking_adaptive_mmco_func mmco_fu

关于c语言的typedef高级用法 typedef void (*post_sync_t)(CO_Data*);

typedef void (*post_sync_t)(CO_Data*); 这个函数的原型是void f(CO_Data*);,经过了typedef void (*post_sync_t)(CO_Data*);后,post_sync_t就是f类型函数的指针的类型别名. 这时你可以这样定义一个变量:post_sync_t p;,p就是一个指向f类型函数的指针.可以这样给p赋值,p=&f. 如果你不typedef的话,定义p时你就得这样写:void (*p)(CO_Data*);

C++之 typedef void *HANDLE

在书写代码与阅读代码的时候,经常会看到这一句代码: typedef void *HANDLE ,它是何方神圣呢?如何理解呢? 不理解它的时候,感觉它很神奇,知道它以后,它就是个typedef的定义,只不过是void*类型罢了,也就是HANDLE等价于void *,我们可以叫它披着句柄皮的指针(PS:指针和句柄是有区别的,在这说句废话): 对于void* 神通广大,因为它作为函数参数or函数返回值,能够接受任何类型的指针:也就是来者不拒,是指针就接受(so open ,Aha).但应用的时候,应该

typedef void (*funcptr)(void) typedef void (*PFV)(); typedef int32_t (*PFI)();

看到以下代码,不明白查了一下: /** Pointer to Function returning Void (any number of parameters) */ typedef void (*PFV)(); /** Pointer to Function returning int32_t (any number of parameters) */ typedef int32_t (*PFI)(); 定义一个函数指针类型.比如你有三个函数: void hello(void) { prin

typedef void (*funcptr)(void)的含义

fun a;//等价于void (*a)(); 这样声明起来就方便多了 void (*a)();表示a是个指针,指向一个不带参数.返回值为空的函数 定义一个函数指针类型. 比如你有三个函数: void hello(void) { printf("你好!"); } void bye(void) { printf("再见!"); } void ok(void) { printf("好的!"); } typdef void (*funcptr)(voi

typedef void (*funcptr)(void)

定义一个函数指针类型.比如你有三个函数:void hello(void) { printf("你好!"); }void bye(void) { printf("再见!"); }void ok(void) { printf("好的!"); } typdef void (*funcptr)(void);这样就构造了一个通用的函数你用的时候可以这样:void speak(int id){ funcptr words[3] = {&hello,

操作系统开发系列—解释typedef void (*int_handler) ();

于是我换了一个思路来理解这个typedef 我们首先看常规的变量定义: int INT//定义了一个名为INT的int型变量. char *c//定义了一个名为c的char型指针变量 void(*Fun)(void);//定义了一个名为Fun的,返回值为void,无参数的函数指针 加上typedef以后,就可以理解为,原来的变量名变成了自己本身对应的类型名 如INT就代表了int类型 c就变成了char* Fun就代表了“返回值为void,无参数的函数指针”型 理解typedef的关键就是,别把

Swift中使用typealias定义一个闭包closure

在OC中我们定义一个Blocks是这样定义的: typedef void (^ZWProgressHUDCompletionBlock)(); 在Swift中定义一个闭包是这样的: typealias ZWProgressHUDCompletionBlock=()->Void 转载请注明!!!欢迎大家加入交流群:爱疯.爱Coding:209476515 Swift中使用typealias定义一个闭包closure,布布扣,bubuko.com