C编程中HANDLE变量是什么?

最近在学习C语言,编写一个贪吃蛇程序时遇到HANDLE变量,边上网查了下资料;对于平常使用,我觉得大概理解下面的内容就可以了:

1.Handle,也叫句柄,实际上是一个数据,是一个Long (整长型)的数据,是一种指向指针的指针。

2.Handle的含义:是一个标识符,是拿来标识对象或 者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只 一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

3.为什么要设置HANDLE,直接用指针调用对象不可以吗?Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来 回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就 可以间接地知道对象具体在内存中的哪个位置。

即:

理论上:句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地 
址(不稳定)→实际对象

功能上:句柄是个指针,但它是个二级指针(指向指针的指针).如果你拥有了一个对象 
的句柄. 你就可以操作对象的所有公共方法. 

 

以上理解来自下面这两篇链接,更细致的解释可戳:

https://www.cnblogs.com/Bryantly2rase/p/4671147.html

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e73236c-dbe1-4493-ac07-c0c963e35852/what-is-handle-in-c-programming?forum=netfxbcl

posted @ 2020-02-13 14:17  JC97  阅读(7166)  评论(0编辑  收藏  举报