zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    如何在IIS添加MIME扩展类型
    如何在ASP.NET的web.config配置文件中添加MIME类型
    Entity Framework 数据库先行、模型先行、代码先行
    Entity Framework 代码先行之约定配置
    netcore3.0 IOptions 选项(一)
    netcore3.0 IFileProvider 文件系统
    netcore3.0 IServiceCollection 依赖注入系统(三)
    netcore3.0 IServiceCollection 依赖注入系统(二)
    netcore3.0 IServiceCollection 依赖注入系统(一)
    netcore3.0 IConfiguration配置源码解析(四)
  • 原文地址:https://www.cnblogs.com/debug-the-heart/p/12303480.html
Copyright © 2011-2022 走看看