You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中如何通过一个变量引用另一个变量?

问题描述

我想在逻辑语句里把一个变量赋值给另一个变量,之后通过后者修改原变量,这样能把我的代码缩短75%以上,但我不知道怎么实现。

我想要的效果示例:

procedure TfrmExample.Proc(Sender: TObject);
var
  iVar1, iVar2: Integer;
begin
  iVar1 := 0;
  iVar2 := 0;

  if TRUE then
  begin
    iVar2 := iVar1;
  end;

  // 希望通过修改iVar2来改变iVar1的值
  Inc(iVar2);
end;

我是不是需要用某种特殊的数据类型来定义iVar1?

下面是我尝试但失败的代码:

procedure TfrmExample.ProcWrong(Sender: TObject);
var
  iVar1: Integer;
  TVar2: TObject;
begin
  iVar1 := 0;

  if TRUE then
  begin
    // 这里提示类型不兼容
    TVar2 := iVar1;
  end;

  // TObject不能用Inc函数
  Inc(TVar2);
end;
解决方法

在Pascal(Delphi)里,普通的值类型赋值只会复制数值,修改新变量不会影响原变量。要实现“通过一个变量修改另一个变量”的需求,你需要用指针或者引用关联方式。

方法1:使用指针(Pointer)

Integer类型对应的指针是PInteger,代码示例:

procedure TfrmExample.Proc(Sender: TObject);
var
  iVar1: Integer;
  pVar2: PInteger; // 定义Integer类型的指针变量
begin
  iVar1 := 0;
  pVar2 := nil; // 初始化指针为空

  if TRUE then
  begin
    pVar2 := @iVar1; // 让指针指向iVar1的内存地址
  end;

  // 先判断指针是否有效,再修改原变量
  if Assigned(pVar2) then
  begin
    Inc(pVar2^); // ^符号表示取指针指向的变量,执行后iVar1的值会变为1
  end;
end;

方法2:使用absolute关键字(共享内存)

如果你的Delphi版本支持,可以用absolute让两个变量共享同一块内存空间:

procedure TfrmExample.Proc(Sender: TObject);
var
  iVar1: Integer;
  iVar2: Integer absolute iVar1; // iVar2和iVar1共用内存
begin
  iVar1 := 0;

  if TRUE then
  begin
    // 无需额外赋值,iVar2已经和iVar1关联
  end;

  Inc(iVar2); // 修改iVar2的同时,iVar1的值也会变成1
end;

为什么之前的尝试失败?

你用TObject接收Integer变量完全错误:TObject是类类型,Integer是值类型,两者类型不兼容,无法直接赋值;另外Inc函数仅支持数值类型,不能作用于对象,所以会报错。

内容的提问来源于stack exchange,提问作者99Emeralds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:12:46