一个关于动态数组的BUG,Copy

下面这样写是不会错的:

复制代码
procedure TForm1.Button1Click(Sender: TObject);
var
  arr1,arr2 : array of integer;
  i : integer;
  sTmp : string;
begin
  for i := 0 to Length(arr1)-1 do
    arr1[i] := i + 1;
  Memo1.Lines.Add(ArrayToString(arr1));
  arr2 := Copy(arr1, 0, 5);
  Memo1.Lines.Add(ArrayToString(arr2));
end;
复制代码

 

如果把两个数组分两行定义,就会报错,如下:

复制代码
procedure TForm1.Button1Click(Sender: TObject);
var
  arr1 : array of integer;
  arr2 : array of integer;
  i : integer;
  sTmp : string;
begin
  for i := 0 to Length(arr1)-1 do
    arr1[i] := i + 1;
  Memo1.Lines.Add(ArrayToString(arr1));
  arr2 := Copy(arr1, 0, 5);
  Memo1.Lines.Add(ArrayToString(arr2));
end;
复制代码

报错:[dcc32 Error] Unit1.pas(63): E2008 Incompatible types

难道分两行定义的动态数组,就不是同一个类型了吗?

或者,这是Delphi编译器的一个BUG?

 

如果自定义一个类型,就不会报错了,如下:

复制代码
type IntArray = array of integer;
procedure TForm1.Button1Click(Sender: TObject);
var
  arr1 : IntArray;
  arr2 : IntArray;
  i : integer;
  sTmp : string;
begin
  for i := 0 to Length(arr1)-1 do
    arr1[i] := i + 1;
  Memo1.Lines.Add(ArrayToString(arr1));
  arr2 := Copy(arr1, 0, 5);
  Memo1.Lines.Add(ArrayToString(arr2));
end;
复制代码

 

posted @   @王新@  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-12-26 修改 SQL SERVER EXPRESS 登录模式
点击右上角即可分享
微信分享提示