句柄与指针有何本质不同?

更新于
2026-10-10 07:51:44
1阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计406个文字,预计阅读时间需要2分钟。

句柄与指针有何本质不同?

句柄在实际上是指向某种资源的指针,但与指针又有区别:指针对应一个数据在内存中的地址,获得指针后可以自由修改该数据;而句柄则对应一个资源,如文件、窗口等,获得句柄后只能通过特定的API来操作该资源,不能直接修改其内部数据。Windows通常不希望程序修改其内部数据结构。

句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。

这句话的意思就是,指针的权利比较强大,直接操作指针,那么它可以任意修改任意数据,无所不能;而句柄则是受到了一定的功能约束,即,只能使用系统提供的API来操作这些数据(加入系统只提供了A,B,C三个服务,那么句柄就只能使用这三个服务,而指针就可以使用其他的,或者自定义的一些,即可能是D,F等服务。)

句柄与指针有何本质不同?

补充:句柄是由操作系统分配的长整数,类似ID号,主要是用于系统的区分。


本文共计406个文字,预计阅读时间需要2分钟。

句柄与指针有何本质不同?

句柄在实际上是指向某种资源的指针,但与指针又有区别:指针对应一个数据在内存中的地址,获得指针后可以自由修改该数据;而句柄则对应一个资源,如文件、窗口等,获得句柄后只能通过特定的API来操作该资源,不能直接修改其内部数据。Windows通常不希望程序修改其内部数据结构。

句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。

这句话的意思就是,指针的权利比较强大,直接操作指针,那么它可以任意修改任意数据,无所不能;而句柄则是受到了一定的功能约束,即,只能使用系统提供的API来操作这些数据(加入系统只提供了A,B,C三个服务,那么句柄就只能使用这三个服务,而指针就可以使用其他的,或者自定义的一些,即可能是D,F等服务。)

句柄与指针有何本质不同?

补充:句柄是由操作系统分配的长整数,类似ID号,主要是用于系统的区分。