C 中的控制代碼

2021-07-15 12:06:38 字數 2592 閱讀 1733

這個控制代碼只是從英文

handle

翻譯過來的,只問句是什麼意思難以解釋,這個是我從別人的空間收集的資訊,

功能上的理解:

什麼是"控制代碼

"(handle

),handle

的本意是把柄,把手的意思。是你與作業系統打交道的東東。

舉個通俗的例子,比如你考上了大學,入學後,學校(作業系統)會給你乙個學生證號。

注意,這個號碼是學校指定的,你無法自選。

有了這個號碼(學生證,假設一證多用)享受學校提供的服務:

如你就可以去圖書館借書,去食堂吃飯,去教室上課等等。

但你不能到食堂裡買啤酒,因為學校不允許這種服務。

而在計算機中系統提供的服務就是

api呼叫,你有了

handle

,就可以理直氣壯地向系統提出呼叫

api的服務。

而指標的權力就大多了,有了指標你可以到處去喝酒,打架,學校(作業系統)管不著,

所以控制代碼和指標的區別在於控制代碼指標呼叫系統提供的服務。

而控制代碼雖然是乙個能相互區別的號碼,但與我們普通的

id號又有區別,

普通的id

號是可以由程式設計師自己定義的,而控制代碼不行,它是物件生成是系統指定的,

是為了區別系統中存在的各個物件,這個控制代碼不是由程式設計師符給的。

概念上的理解

1。控制代碼,是整個

windows

程式設計的基礎,乙個控制代碼是指使用的乙個唯一的整數值,

是指乙個四位元組長的數值,用於標誌應用程式中的不同物件和同類物件中的不同的例項,

諸如,乙個視窗,按鈕,圖示,滾動條,輸出裝置,控制項或者檔案等。

應用程式能夠通過控制代碼訪問相應的物件的資訊。

2。控制代碼不是乙個指標,程式不能利用它控制代碼來直接閱讀檔案中的資訊。

如果控制代碼不用在

i/o檔案中,它是毫無用處的。

3。控制代碼是

windows

用來標誌應用程式中建立的或是使用的唯一整數,

windows

使用了大量的控制代碼來來標誌很多物件。

機制上的理解

前面的分析很經典,但我認為有一點必須指出的。如果不對,請各位指證。

控制代碼是指標,一點不假,但是這個指標又與

c中的指標有不同之處。

因為windows

是乙個多工的系統,其記憶體是可以移動的,

這樣的話如果某一時刻有乙個指標指向一塊記憶體,之後的某個時刻卻被系統移走了,

如果你再用這個指標的話就會出錯。

為了解決這一問題,

windows

在系統專區開一塊記憶體用於存放控制代碼,這個控制代碼的值就是乙個位址,

當這一塊記憶體被移走後,

windows

就修改這個控制代碼的值,再訪問這塊記憶體時,控制代碼的值總是有效的。

正因為這樣當你使用

globalalloc

分配的記憶體時,如果你指定這塊記憶體的屬性是固定的,

那麼它的返回值可以直接給乙個指標,如果是可以移動的,

返回值就必須給乙個控制代碼,你就必須先

globallock

後才能使用。

這是我對控制代碼理解,不知道對不對?

我的理解

其實,控制代碼是乙個指向指標的指標。即:

在windows

程式設計中,控制代碼僅是乙個應用程式用來識別某些事情的數字

如果想更透徹一點地認識控制代碼,我可以告訴大家,控制代碼是一種指向指標的指標。

我們知道,所謂指標是一種記憶體位址。

應用程式啟動後,組成這個程式的各物件是住留在內的

。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。

但是,如果您真的這樣認為,那麼您就大錯特錯了。

我們知道,

windows

是乙個以虛擬記憶體為基礎的作業系統。在這種系統環境下,

windows

記憶體管理器經常在記憶體中來回移動物件,依此來滿足各種應用程式的記憶體需要。

物件被移動意味著它的位址變化

了。如果位址總是如此變化,我們該到**去找該物件呢

?為了解決這個問題,

windows

作業系統為各應用程式騰出一些內儲存位址,

用來專門

登記各應用物件在記憶體中的位址變化,而這個位址

(儲存單元的位置

)本身是不變的。

wi ndows

記憶體管理器在移動物件在記憶體中的位置後,把物件新的位址告知這個控制代碼位址來儲存。

這樣我們只需記住這個控制代碼位址就可以間接地知道物件具體在記憶體中的哪個位置。

這個位址是在物件裝載

(load)

時由系統分配給的,當系統解除安裝時

(unload)

又釋放給系統。

控制代碼位址(穩定

)→記載著物件在記憶體中的位址

→物件在記憶體中的位址

(不穩定

) →實際物件

但是,必須注意的是程式每次從新啟動,系統不能保證分配給這個程式的控制代碼還是

原來的那個控制代碼,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成

是乙個應用程式的啟動執行,那麼系統給應用程式分配的控制代碼總是不一樣,這和每次電

影院售給我們的門票總是不同的乙個座位是一樣的道理。

C 中的控制代碼類

初次在 c primer 看到控制代碼,不是特別理解。在搜尋相關資料後,終於有了點頭緒。首先明白控制代碼要解決什麼問題。參考文章 c 沉思錄 閱讀筆記 類 場景 我們要把繼承類繫結到基類的例項物件中 該場景有兩個問題需要解決 記憶體分配和未知物件的繫結 有如下解決方案 直接複製繼承類物件到基類物件中...

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

從廣義上,能夠從乙個數值拎起一大堆資料的東西都可以叫做控制代碼。控制代碼的英文是 handle 本義就是 柄 只是在電腦科學中,被特別地翻譯成 控制代碼 其實還是個 柄 從乙個小東西拎起一大堆東西,這難道不像是個 柄 嗎?然後,指標其實也是一種 控制代碼 只是由於指標同時擁有更特殊的含義 實實在在地...

MFC中的控制代碼

1.引出控制代碼 cdc問題 1.cdc dc dc.lineto point 無法執行 2.cdc dc getdc dc lineto point 就可以執行了 mfc中有大量的控制代碼包裝類。所謂控制代碼包裝類,指的是這些類是封裝了系統物件的控制代碼,並提供了一組成員函式作為訪問系統物件的介面...