将所有值重置为动态数组中的默认值

时间:2019-05-11 17:46:22

标签: delphi delphi-xe7

请查看我的代码:

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

1 个答案:

答案 0 :(得分:3)

SetLength()对它分配的内存进行零初始化,因此,是的,默认情况下,布尔值始终为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), $0);
end;