
- Pascal 教程
- Pascal - 首頁
- Pascal - 概述
- Pascal - 環境設定
- Pascal - 程式結構
- Pascal - 基本語法
- Pascal - 資料型別
- Pascal - 變數型別
- Pascal - 常量
- Pascal - 運算子
- Pascal - 決策制定
- Pascal - 迴圈
- Pascal - 函式
- Pascal - 過程
- Pascal - 變數作用域
- Pascal - 字串
- Pascal - 布林值
- Pascal - 陣列
- Pascal - 指標
- Pascal - 記錄
- Pascal - 變體
- Pascal - 集合
- Pascal - 檔案處理
- Pascal - 記憶體
- Pascal - 單元
- Pascal - 日期和時間
- Pascal - 物件
- Pascal - 類
- Pascal 有用資源
- Pascal - 快速指南
- Pascal - 有用資源
- Pascal - 討論
Pascal - 指標運算
如主要章節所述,Pascal 指標是一個地址,它是一個儲存在字中的數值。因此,您可以對指標執行算術運算,就像對數值執行算術運算一樣。有四個算術運算子可用於指標:增量、減量、+ 和 -。
為了理解指標運算,讓我們考慮 ptr 是一個指向地址 1000 的整數指標。假設 32 位整數,讓我們對指標執行增量運算 -
Inc(ptr);
現在,在上述操作之後,ptr 將指向位置 1004,因為每次ptr遞增時,它將指向下一個整數位置,即當前位置後面的 4 個位元組。此操作將指標移動到下一個記憶體位置,而不會影響記憶體位置的實際值。如果ptr指向一個字元,其地址為 1000,則上述操作將指向位置 1001,因為下一個字元將在 1001 處可用。
指標的增量
我們更傾向於在程式中使用指標而不是陣列,因為變數指標可以遞增,而陣列名稱則不能遞增,因為它是一個常量指標。以下程式遞增變數指標以訪問陣列的每個後續元素 -
program exPointers; const MAX = 3; var arr: array [1..MAX] of integer = (10, 100, 200); i: integer; iptr: ^integer; y: ^word; begin (* let us have array address in pointer *) iptr := @arr[1]; for i := 1 to MAX do begin y:= addr(iptr); writeln('Address of arr[', i, '] = ' , y^ ); writeln(' Value of arr[', i, '] = ' , iptr^ ); (* move to the next location *) inc(iptr); end; end.
編譯並執行上述程式碼後,將產生以下結果 -
Address of arr[1] = 13248 Value of arr[1] = 10 Address of arr[2] = 13250 Value of arr[2] = 100 Address of arr[3] = 13252 Value of arr[3] = 200
指標的減量
相同的考慮因素適用於指標的減量,它將指標的值減少其資料型別的位元組數,如下所示 -
program exPointers; const MAX = 3; var arr: array [1..MAX] of integer = (10, 100, 200); i: integer; iptr: ^integer; y: ^word; begin (* let us have array address in pointer *) iptr := @arr[MAX]; for i := MAX downto 1 do begin y:= addr(iptr); writeln('Address of arr[', i, '] = ' , y^ ); writeln(' Value of arr[', i, '] = ' , iptr^ ); (* move to the next location *) dec(iptr); end; end.
編譯並執行上述程式碼後,將產生以下結果 -
Address of arr[3] = 13252 Value of arr[3] = 200 Address of arr[2] = 13250 Value of arr[2] = 100 Address of arr[1] = 13248 Value of arr[1] = 10
指標比較
可以使用關係運算符(例如 =、< 和 >)來比較指標。如果 p1 和 p2 指向彼此相關的變數,例如同一陣列的元素,則可以有意義地比較 p1 和 p2。
以下程式修改了前面的示例,透過遞增變數指標來實現,只要它指向的地址小於或等於陣列最後一個元素的地址(即 @arr[MAX]) -
program exPointers; const MAX = 3; var arr: array [1..MAX] of integer = (10, 100, 200); i: integer; iptr: ^integer; y: ^word; begin i:=1; (* let us have array address in pointer *) iptr := @arr[1]; while (iptr <= @arr[MAX]) do begin y:= addr(iptr); writeln('Address of arr[', i, '] = ' , y^ ); writeln(' Value of arr[', i, '] = ' , iptr^ ); (* move to the next location *) inc(iptr); i := i+1; end; end.
編譯並執行上述程式碼後,將產生以下結果 -
Address of arr[1] = 13248 Value of arr[1] = 10 Address of arr[2] = 13250 Value of arr[2] = 100 Address of arr[3] = 13252 Value of arr[3] = 200
pascal_pointers.htm
廣告