當前位置:編程學習大全網 - 編程語言 - 函數句柄和指針的區別是什麽

函數句柄和指針的區別是什麽

句柄實際上是壹種指向某種資源的指針,但與指針又有所不同:指針對應著壹個數據在內存中的地址,得到了指針就可以自由地修改該數據。Windows並不希望壹般程序修改其內部數據結構,因為這樣太不安全。所以Windows給每個使用GlobalAlloc等函數聲明的內存區域指定壹個句柄(本質上仍是壹個指針,但不要直接操作它),平時妳只是在調用API函數時利用這個句柄來說明要操作哪段內存。當妳需要對某個內存進行直接操作時,可以使用GlobalLock鎖住這段內存並獲得指針來直接進行操作。“句柄”(handle),handle的本意是把柄,把手的意思。是妳與操作系統打交道的東西。舉個例子:比如妳做了虧心事(我說的是比如,呵呵),不幸讓我抓住了把柄,那麽我讓妳做什麽妳就得做什麽,因為妳的把柄在我這。我們編程的時候也是這樣,比如我們要想操縱壹個窗口,那我們就必須“抓住它的把柄”,只有這樣,我們才能改變它的屬性,改變它的式樣,甚至銷毀它(狠了點兒)。我們再引用壹個通俗壹點的例子,比如妳考上了大學,入學後,學校(操作系統)會給妳壹個學生證號。註意,這個號碼是學校指定的,妳無法自選。有了這個號碼(學生證,假設壹證多用)就可以享受學校提供的服務:如妳就可以去圖書館借書,去食堂吃飯,去教室上課等等。但妳不能到食堂裏買啤酒,因為學校不允許這種服務。而在計算機中系統提供的服務就是API調用,妳有了HANDLE,就可以理直氣壯地向系統提出調用API的服務。而指針的權力就大多了,有了指針妳可以到處去喝酒,打架,學校(操作系統)管不著,所以句柄和指針的區別在於句柄只能調用系統提供的服務。而句柄雖然是壹個能相互區別的號碼,但與我們普通的ID號又有區別,普通的ID號是可以由程序員自己定義的,而句柄不行,它是對象生成時系統指定的,是為了區別系統中存在的各個對象,這個句柄不是由程序員賦給的。實際應用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是壹個長整數,每個窗體都用壹個句柄來表示。所以句柄是不會重復的,很多的函數都會用到窗體的句柄。

  • 上一篇:鋁沖壓拉延油解析:鋁合金外殼沖壓拉伸九要點
  • 下一篇:軟件工程師屬什麽專業
  • copyright 2024編程學習大全網