gpt4 book ai didi

delphi - 如果我通过在 pascal 中分配一个未初始化的数组来清除数组,会发生什么不好的事情吗?

转载 作者:行者123 更新时间:2023-12-01 21:51:03 25 4
gpt4 key购买 nike

在 pascal 中,我敢于清理数组的唯一方法是简单地迭代它并清除它,但效率极低。我不能简单地通过为其分配一个空数组来重新初始化它吗?

program arrays;
var
working, empty : array [1..10] of integer;
begin
working[3] := 5;
working:= empty;
end.

这样做可以吗,会适得其反吗?

最佳答案

如果您想清除数组,请写入:

working:= empty;

实际上会通过将数组内容复制工作中来进行清除...在您的情况下 是 void,因为它是一个全局变量,所以用 0 初始化。

恕我直言,定义这样的全局变量并不是一个好的做法。全局变量在大多数情况下都是邪恶的(除非你知道自己在做什么),并且如果声明它们用 0 初始化是没有意义的。

事实上,如果在堆栈上初始化了empty(即方法内的var),它就会被此时堆栈上的任何内容填充,即一些随机数据。

如果你想快速初始化一个不包含任何引用计数类型(如string)的数组,你可以这样写:

fillchar(working,sizeof(working),0);

如果您的数组包含托管类型,您可以编写:

finalize(workingWithStringInside); // to safely release internal managed types
fillchar(workingWithStringInside,sizeof(workingWithStringInside),0);

这是可能的更快的代码(比变量副本更快),并且听起来是更好的选择。

关于delphi - 如果我通过在 pascal 中分配一个未初始化的数组来清除数组,会发生什么不好的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com