標準c語言裡沒有far遠端指標。
那是16位的dos下的定址方式的衍生物。
在32位的作業系統下,位址是32位的,不像dos的實模式要用分段的方法。
簡而言之,不用管far遠端指標,因為標準c語言裡沒有far遠端指標,現在也不需要用。
dos 的設計是基於16位的cpu的,也就是cpu中的每個暫存器(register)只有16位,只能存放0-65535(64k)的值。為了能訪問大於64k的記憶體,人們用了分段的方法,用兩個16位的數來記錄邏輯上位址,第乙個是段值(segment),第二個是偏移量(offset),寫起來的格式一般是 段值:偏移量。如 0100:0020 (十六進製制,位址通常用十六進製制的數字) 。這樣就有乙個32位的位址了。嚴格來說,因為硬體的緣故,段值個位(當然是十六進製制的個位)只能為零,這種分段的方法並不能訪問32位範圍內的所有位址。
一般的dos程式都把執行的**放在乙個段,資料放在另乙個段。當然,這只是邏輯上的。而且也有例外,如所有的com格式的程式**段也放資料。
dos 下的16位c編譯器(如 tc 2.0, m$ c)產生的可執行檔案(exe)都可以選**模式,例如:huge, large, medium, **all, tiny(compact)等等。其區別只在於用多少個段來放**和資料。
如果上面的你都明白了,下面的就好理解了。
16位c編譯器的整型和指標預設是16位的。預設指標只有偏移量(offset)的值,只能指向同一段的地方。也叫近程指標(near pointer)。當要用指標訪問另乙個段的地方時,就要定義指標32位的遠端指標(far pointer)。當程式有多於乙個的**段(如果是函式指標)或資料段(如果是變數指標),而指標和指向的地方不在同乙個段的時候,就必須把指標定義為遠端指標(far pointer)。
關於far 指標
far 現在不用了,以前用在16位 裡,因為 是16位的,所以指標不夠長.為了表示32位的位址.應該使用 r 來修飾 乙個指標。16位機情況 由於pc機的儲存器位址是由段位址和偏移位址組合而成,每個段不能超過64k位元組位址,因此同乙個段內的位址訪問,僅用偏移位址就可以實現,用指標時,16位就可以了...
near指標,far指標,huge指標
near指標和far指標 在dos下 實模式 位址是分段的,每一段的長度為64k位元組,剛好是16位 二進位制的十六位 near指標的長度是16位的,所以可指向的位址範圍是64k位元組,通常說near指標的定址範圍是64k。far指標的長度是32位,含有乙個16位的基位址和16位的偏移量,將基位址乘...
near指標,far指標,huge指標
near指標和far指標 在dos下 實模式 位址是分段的,每一段的長度為64k位元組,剛好是16位 二進位制的十六位 near指標的長度是16位的,所以可指向的位址範圍是64k位元組,通常說near指標的定址範圍是64k。far指標的長度是32位,含有乙個16位的基位址和16位的偏移量,將基位址乘...