c 控制代碼和指標的區別

2021-06-27 18:25:49 字數 1784 閱讀 9187

控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同:指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以windows給每個使用globalalloc等函式宣告的記憶體區域指定乙個控制代碼(本質上仍是乙個指標,但不要直接操作它),平時你只是在呼叫api函式時利用這個控制代碼來說明要操作哪段記憶體。

當你需要對某個記憶體進行直接操作時,可以使用globallock鎖住這段記憶體並獲得指標來直接進行操作。  

「控制代碼」(handle),handle的本意是把柄,把手的意思。是你與作業系統打交道的東西。

舉個例子:比如你做了虧心事(我說的是比如,呵呵),不幸讓我抓住了把柄,那麼我讓你做什麼你就得做什麼,因為你的把柄在我這。

我們程式設計的時候也是這樣,比如我們要想操縱乙個視窗,那我們就必須「抓住它的把柄」,只有這樣,我們才能改變它的屬性,改變它的式樣,甚至銷毀它(狠了點兒)。

我們再引用乙個通俗一點的例子,比如你考上了大學,入學後,學校(作業系統)會給你乙個學生證號。注意,這個號碼是學校指定的,你無法自選。有了這個號碼(學生證,假設一證多用)就可以享受學校提供的服務:如你就可以去圖書館借書,去食堂吃飯,去教室上課等等。但你不能到食堂裡買啤酒,因為學校不允許這種服務。

在計算機中系統提供的服務就是api呼叫,你有了handle,就可以理直氣壯地向系統提出呼叫api的服務。

指標的權力就大多了,有了指標你可以到處去喝酒,打架,學校(作業系統)管不著,所以控制代碼和指標的區別在於控制代碼只能呼叫系統提供的服務。而控制代碼雖然是乙個能相互區別的號碼,但與我們普通的id號又有區別,普通的id號是可以由程式設計師自己定義的,而控制代碼不行,它是物件生成時系統指定的,是為了區別系統中存在的各個物件,這個控制代碼不是由程式設計師賦給的。實際應用中,最常用的就是檔案控制代碼和視窗控制代碼。例如,視窗控制代碼的值是乙個長整數,每個窗體都用乙個控制代碼來表示。所以控制代碼是不會重複的,很多的函式都會用到窗體的控制代碼。

控制代碼的英文是"handle",本義就是"柄",只是在電腦科學中,被特別地翻譯成"控制代碼",其實還是個"柄"。指標其實也是一種"控制代碼",只是由於指標同時擁有更特殊的含義——實實在在地對應記憶體裡地乙個位址——所以,通常不把指標說成是"控制代碼"。

c++控制代碼與指標的區別

學習c++的人都知道控制代碼和指標,而且我發現很多人在控制代碼與指標之間直接劃等號,對我們來說兩者都是位址,我覺的這也造成很多人將控制代碼和指標劃等號的直接原因。

首先說指標吧。通俗一點就是位址,他是記憶體的編號,通過它我們可以直接對記憶體進行操作,只要位址不變,我們每次操作的物理位置是絕對不變,記住這句話,這是控制代碼和指標的重大區別所在。

再說說控制代碼吧,一般是指向系統的資源的位置,可以說也是位址。但是這些資源的位置真的不變,我們都知道window支援虛擬記憶體的技術,同一時間內可能有些資源被換出記憶體,一些被換回來,這就是說同一資源在系統的不同時刻,他在記憶體的物理位置是不確定的,那麼window是如何解決這個問題呢,就是通過控制代碼來處理資源的物理位置不斷變化的這個問題的。window會在物理位置固定的區域儲存一張對應表,表中記錄了所有的資源實時位址,控制代碼其實沒有直接指向資源的實體地址,而是指向了這個對應表中的一項,這樣無論資源怎樣的換進換出,通過控制代碼都可以找到他的實時位置。

總的來說,通過控制代碼可以遮蔽系統內部的細節,讓程式設計可以不必考慮作業系統實現的細節。如果還不能理解控制代碼與指標之間的區別,可以想象指向指標的指標,可以把控制代碼當作乙個指向指標的指標來理解。

C 控制代碼和指標的區別

控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同 指標對應乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式設計師修改其內部資料結構,因為這樣不太安全。所以windows給每個使用globalalloc等函式宣告地記憶體區域指定乙個控制代碼 本質上仍...

控制代碼和指標的區別

首先,指標指向系統中物理記憶體的位址,而控制代碼是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引,控制代碼是一種指向指標的指標。在windows系統中的記憶體管理一般會將當前處於空閒狀態的物件的記憶體釋放掉,當需要訪問的時候再重新提交分配物理記憶體,從而導致物件的實體地址是變化的...

什麼是控制代碼?指標和控制代碼的區別

控制代碼在windows程式設計中是乙個很重要的概念,在許多地方都扮演著重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括 1 模組 module 2 任務 task 3 例項 instance 4 檔案 file 5 記憶體塊 block of memory 6 選單 me...