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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM