
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境搭建
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if語句
- C - if...else語句
- C - 巢狀if語句
- C - switch語句
- C - 巢狀switch語句
- C語言中的迴圈
- C - 迴圈
- C - while迴圈
- C - for迴圈
- C - do...while迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break語句
- C - continue語句
- C - goto語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者自定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指標到指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void指標
- C - 懸空指標
- C - 解引用指標
- C - 近指標、遠指標和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點(.)運算子
- C - 列舉(或enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入 & 輸出
- C - 檔案I/O(檔案處理)
- C預處理器
- C - 預處理器
- C - 指令
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類別
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的近指標、遠指標和巨型指標
**近指標**、**遠指標**和**巨型指標**等概念曾用於 C程式語言 處理分段記憶體模型。但是,在具有改進的 CPU架構 的現代計算環境中,這些概念已不再相關。
**近指標、遠指標和巨型指標**的概念是在16位Intel架構中實現的,當時MS DOS作業系統正處於鼎盛時期。
近指標
C語言中的“**near**”關鍵字用於宣告一個只能訪問當前資料段內記憶體的 指標。在16位機器上,**近指標**是一個只能儲存16位地址的指標。
**近指標**在給定時間段內只能訪問大約64kb的小資料,這是其主要缺點。近指標的大小為2位元組。
近指標語法
<data type> near <pointer definition> <data type> near <function definition>
以下語句聲明瞭變數“ptr”的近指標:
char near *ptr;
近指標示例
請看下面的例子:
#include <stdio.h> int main(){ // declaring a near pointer int near *ptr; // size of the near pointer printf("Size of Near Pointer: %d bytes", sizeof(ptr)); return 0; }
輸出
它將產生以下輸出:
Size of Near Pointer: 2 bytes
遠指標
**遠指標**是一個32位指標,可以訪問給定段之外的 計算機記憶體 中的資訊。要使用此指標,必須分配“段暫存器”來儲存段中的資料地址,並且還必須將另一個段暫存器儲存在最新的段中。
**遠指標**儲存指標所指向的偏移地址和段地址。當指標遞增或遞減時,只有偏移部分發生變化。遠指標的大小為4位元組。
遠指標語法
<data type> far <pointer definition> <data type> far <function definition>
以下語句聲明瞭變數“ptr”的遠指標:
char far *s;
遠指標示例
請看下面的例子:
#include <stdio.h> int main(){ int number=50; int far *p; p = &number; printf("Size of far pointer: %d bytes", sizeof(number)); return 0; }
輸出
它將產生以下輸出:
Size of far pointer: 4 bytes
巨型指標
**巨型指標**與**遠指標**具有相同的大小,為32位。巨型指標還可以訪問位於段之外的位。
遠指標是固定的,因此它們所在的段部分不能以任何方式修改;但是巨型指標可以修改。
在巨型指標中,偏移地址和段地址都會發生變化。這就是為什麼我們可以使用**巨型指標**從一個段跳轉到另一個段。由於它們比較絕對地址,因此您可以對其執行關係運算。巨型指標的大小為4位元組。
巨型指標語法
以下是宣告巨型指標的語法:
data_type huge* pointer_name;
巨型指標示例
請看下面的例子:
#include <stdio.h> int main(){ int huge* ptr; printf("Size of the Huge Pointer: %d bytes", sizeof(ptr)); return 0; }
輸出
它將產生以下輸出:
Size of Huge Pointer: 4 bytes
需要記住的指標
在使用近指標、遠指標和巨型指標時,請記住以下幾點:
- 近指標只能儲存前64kB的地址,而遠指標可以儲存RAM中任何記憶體位置的地址。巨型指標可以在多個記憶體段之間移動。
- 近指標只能在一個暫存器中儲存地址。另一方面,遠指標使用兩個暫存器來儲存段地址和偏移地址。近指標的大小為2位元組,而遠指標和巨型指標的大小為4位元組。
- 兩個遠指標值可以指向同一個位置,而在巨型指標的情況下,這是不可能的。
近指標、遠指標和巨型指標用於基於段暫存器管理分段記憶體架構中的記憶體訪問。現代系統使用平面記憶體模型,其中記憶體被定址為單個連續空間。現代C編譯器提供了更好的記憶體管理技術,這些技術不依賴於分段概念。