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

Delphi执行自定义数组移位过程后原数组未发生变化的原因是什么

问题原因解析

1. 核心问题:参数传递方式错误

Delphi中按值传递的参数默认会在栈上创建副本,过程内部修改的只是副本的值,不会回写到外部传入的原始变量。
你当前定义的过程:

procedure ArrayShiftRowUp(arrArrayShift: arrRotor );

没有加var关键字,属于按值传递,所以你对arrArrayShift的所有修改都只作用在过程内部的副本上,外部的arrTest自然不会发生变化。

修复方法

在参数前添加var关键字,改为按引用传递,直接操作外部变量的内存地址:

procedure ArrayShiftRowUp(var arrArrayShift: arrRotor );

2. 附加优化:移位逻辑可调整

你当前使用相邻元素交换实现循环左移,虽然对于定长10位的数组可以得到正确结果,但性能较差,更高效的循环左移一位实现参考:

procedure TForm2.ArrayShiftRowUp(var arrArrayShift: arrRotor );
var
  tempS: string;
  i: Integer;
begin
  tempS := arrArrayShift[Low(arrArrayShift)]; // 保存第一个元素
  for i := Low(arrArrayShift) to High(arrArrayShift)-1 do
  begin
    arrArrayShift[i] := arrArrayShift[i+1];
  end;
  arrArrayShift[High(arrArrayShift)] := tempS; // 第一个元素放到末尾
end;

另外建议不要使用全局变量存储临时值tempS、循环变量i,在过程内部定义局部变量可以避免多线程/多次调用冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:36:04