将动态数组中的所有值重置为默认值
Reset all values to default in dynamic array
请看我的代码:
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(b,3); //All values are False by default
b[0]:=True;
//Do something here
SetLength(b,0);
SetLength(b,3);
end;
我测试了 b[0]=False
。
我的问题:使用 SetLength(b,0)
然后 SetLength(b,n)
是否是将所有值重置为默认值 (False) 的正确方法?
在所有情况下都是 b[0]=False
,还是在某些情况下是 True
?
SetLength()
zero-initializes 它分配的内存,所以是的,默认情况下布尔值始终为 False。
也就是说,与其重新分配数组,不如考虑手动重置布尔值:
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
begin
SetLength(b,3); //All values are False by default
b[0] := True;
//Do something here
for I := 0 to High(b) do
b[I] := False; // or Default(Boolean)
end;
或者,您可以使用 FillChar()
或 ZeroMemory()
:
用零填充分配的内存
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(b,3); //All values are False by default
b[0] := True;
//Do something here
ZeroMemory(@b[0], Length(b)); // or FillChar(b[0], Length(b), [=11=]);
end;
请看我的代码:
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(b,3); //All values are False by default
b[0]:=True;
//Do something here
SetLength(b,0);
SetLength(b,3);
end;
我测试了 b[0]=False
。
我的问题:使用 SetLength(b,0)
然后 SetLength(b,n)
是否是将所有值重置为默认值 (False) 的正确方法?
在所有情况下都是 b[0]=False
,还是在某些情况下是 True
?
SetLength()
zero-initializes 它分配的内存,所以是的,默认情况下布尔值始终为 False。
也就是说,与其重新分配数组,不如考虑手动重置布尔值:
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
begin
SetLength(b,3); //All values are False by default
b[0] := True;
//Do something here
for I := 0 to High(b) do
b[I] := False; // or Default(Boolean)
end;
或者,您可以使用 FillChar()
或 ZeroMemory()
:
var
b: array of Boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(b,3); //All values are False by default
b[0] := True;
//Do something here
ZeroMemory(@b[0], Length(b)); // or FillChar(b[0], Length(b), [=11=]);
end;