- 帕斯卡教程
- 帕斯卡 - 主页
- 帕斯卡 - 概述
- 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