在 Delphi 中,指针(Pointer)是一种非常强大的工具,可以直接操作内存地址。这些指针主要用于需要高效或特定内存操作的场景。以下是一些常见的指针使用示例,包括基本用法、动态内存分配以及数组和记录的操作。
### 基本指针用法
```delphi
procedure BasicPointerExample;
var
Ptr: ^Integer;
Value: Integer;
begin
Value := 42;
Ptr := @Value; // 获取变量 Value 的地址
ShowMessage(IntToStr(Ptr^)); // 显示 Ptr 指向的值,即 42
end;
```
### 动态内存分配
```delphi
procedure DynamicMemoryAllocationExample;
var
Ptr: ^Integer;
begin
// 动态分配内存
New(Ptr);
Ptr^ := 42; // 设置 Ptr 指向的内存的值
ShowMessage(IntToStr(Ptr^)); // 显示 Ptr 指向的值,即 42
Dispose(Ptr); // 释放内存
end;
```
### 操作数组
```delphi
procedure ArrayPointerExample;
var
Arr: array[1..5] of Integer;
Ptr: ^Integer;
I: Integer;
begin
// 初始化数组
for I := 1 to 5 do
Arr[I] := I * 10;
// 获取数组的指针
Ptr := @Arr[1];
// 通过指针访问数组
for I := 0 to 4 do
ShowMessage(IntToStr((Ptr + I)^)); // 显示 10, 20, 30, 40, 50
end;
```
### 操作记录
```delphi
type
TMyRecord = record
Age: Integer;
Name: string;
end;
PMyRecord = ^TMyRecord;
procedure RecordPointerExample;
var
Rec: TMyRecord;
Ptr: PMyRecord;
begin
Rec.Age := 30;
Rec.Name := 'John Doe';
Ptr := @Rec; // 获取记录的指针
ShowMessage(IntToStr(Ptr^.Age)); // 显示 30
ShowMessage(Ptr^.Name); // 显示 John Doe
end;
```
### 使用 `GetMem` 和 `FreeMem` 分配和释放内存
```delphi
procedure GetMemFreeMemExample;
var
Ptr: Pointer;
Value: Integer;
begin
// 分配内存
GetMem(Ptr, SizeOf(Integer));
Integer(Ptr^) := 42; // 设置 Ptr 指向的内存的值
Value := Integer(Ptr^);
ShowMessage(IntToStr(Value)); // 显示 42
// 释放内存
FreeMem(Ptr);
end;
```
### 字符串操作
```delphi
procedure StringPointerExample;
var
Str: string;
Ptr: PChar;
begin
Str := 'Hello, Delphi!';
Ptr := PChar(Str); // 获取字符串的指针
while Ptr^ <> #0 do
begin
ShowMessage(Ptr^); // 显示每个字符
Inc(Ptr); // 移动到下一个字符
end;
end;
```
以上示例展示了如何在 Delphi 中使用指针来操作不同类型的数据。使用指针时需特别注意内存管理,以避免内存泄漏或访问无效内存。
留言