在 Delphi 中,指针(Pointer)是一种非常强大的工具

 在 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 中使用指针来操作不同类型的数据。使用指针时需特别注意内存管理,以避免内存泄漏或访问无效内存。

留言